我有这段代码用于从我的 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/