【发布时间】:2018-05-25 18:29:26
【问题描述】:
我在 Node.js 中使用 soket.io,它工作正常,但是路由文件中存在问题。
以下是我的代码和流程。
我有server.js 文件,我在其中定义io。
var express = require('express'),
app = express(),
http = require('http').Server(app);
var io = require('socket.io').listen(http);
//io from server.js
io.on('connection', function (socket) {
socket.emit('getDevicePostData', { message : 'Hi from server!!' });
socket.on('sendDevicePostData', function("Hi from server") {});
});
// pass io to routes file
var smart_control = require('./smart_control.js')(io);
app.use('/', smart_control);
smart_control.js 文件代码如下
module.exports = function(io) {
router.post('/emitdata', function(req, res, next) {
io.sockets.emit('getDevicePostData', { message : 'Hi from route!!' });
});
return router;
}
上述路由的发射有时有效,有时无效。
这个发射是从 Angular js 调用的。我在角度使用https://www.npmjs.com/package/angular-socket-io 包 角度控制器中的以下代码:
mySocket.on('getDevicePostData', function(data) {
console.log(data);
});
这里 mySocket 是工厂。
我的代码有什么问题。主要是路由文件的问题。
【问题讨论】:
-
当它不起作用时会发生什么?服务器是否显示与 POST 相关的任何内容?比如:POST /emitdata [响应码]
-
当我调用路由时,我在 mySocket.on('getDevicePostData', function(data) { console.log(data); }); 的角度侧没有得到任何响应;
-
你的路由器被调用了吗?
-
我已经在我的演示中实现了你的代码,我发现发布请求没有完成。所以你需要手动 end 使用这个请求:
res.end();。最后在 router.post 请求中添加这个。 -
我使用 res.json({data:"success"});在路由器帖子的末尾
标签: angularjs node.js express socket.io