javascript - io.on 不是函数

标签 javascript node.js socket.io arduino

我有这段代码用于从我的 Arduino 接收数据,但我想将数据发送回我的 Arduino 并在我的客户端页面上获得响应。我添加了一个监听函数,但是当我从我的客户端页面发送数据时,我一直收到 io.on is not a function

test.js

io.listen(app.listen(3000)).on('connection', function (client) {

    // store client into array
    clients.push(client);

    // on disconnect
    client.on('disconnect', function() {

        // remove client from array
        clients.splice(clients.indexOf(client), 1);


    });

    // I added this to listen for event from my chart.JS

    io.on('connection', function(socket){

        socket.on('LED on', function (data) {
            console.log(data);

        });
        socket.on('LED off', function (data) {
            console.log(data);

        });
    });
});

最佳答案

io 的值不是它应有的值。

通常的做法是这样的:

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(80);

io.on('connect', ...);

但我猜你的 io 值是这样的:

var io = require('socket.io');

这不是一回事。那是模块句柄。但是,当您这样做时:

var io = require('socket.io')(app);

然后,io 是一个 socket.io 实例。您可以将监听器绑定(bind)到实例,而不是模块句柄。


this doc page 上的每个 socket.io 服务器端示例中, 他们使用以下形式之一:

var io = require('socket.io')(app);
var io = require('socket.io')(port);
var io = require('socket.io')(server);

用这个:

 io.on('connection', ....);

他们无处可做:

var io = require('socket.io`);
io.listen(server);
io.on('connection', ....);

io 的值是错误的。


长话短说,您需要修复分配给 io 的内容以与文档保持一致。它是 require('socket.io')(app); 的返回值,它为您提供了一个 socket.io 实例对象,然后您可以在该对象上设置事件处理程序。

关于javascript - io.on 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41623528/

相关文章:

javascript - 在 socket.io 中向套接字添加变量

javascript - 使用 Express.js 在服务器上发送 POST 请求

node.js - 处理 node.js 中的操作错误

node.js - 根据 Node 的输入设置 Jade 模板中复选框的选中属性

node.js - node js 同时使用 Mongodb 和 Redis

javascript - 第一次 Node 后 setInterval 无法正常工作

javascript - 将工具提示文本与其元素分开设置

javascript - jQuery Mobile 固定页脚始终在底部

javascript - Typescript 中的工厂函数使用和不使用 new 关键字声明文件

javascript - 双重渲染useEffect Reactjs