我有这个代码用于从我的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);
});
});
});
答案 0 :(得分:10)
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实例。您可以将侦听器绑定到实例,而不是绑定到模块句柄。
在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实例对象,然后您可以在其上设置事件处理程序。