从节点中的rest api调用socket.io

我想从我的restful api发出一个socket.io事件。

我目前的设置看起来像这样:

app.js设置一个快速的应用程序,并创build所有必要的路线,如:

var app = express(); ... var routesApi = require('./app_api/routes/index'); app.use('/api', routesApi); module.exports = app; 

server.js创build一个服务器并且连接express app和socket.io

 var http = require('http'); var server = http.createServer(app); require('../app_server/controllers/socket.js').socketServer(server); 

一切正常,我可以成功地从客户端触发套接字事件,在socket.js中处理它,并发出结果。

然而,我想要做的是从我的restful api调用socket.js方法,我无法弄清楚如何挂钩。

由于套接字服务器在server.js中初始化,我的api路由被连接到app.js中,所以我不确定让它们相互通信的正确方法是什么。

谢谢

您应该在快速部分(或者您有app )初始化Socket.io,以便您可以将其保存在快速请求中,并在您想要的每个路线中使用它。

所以在你的app.js你创build了套接字,然后将它保存在应用程序中:

 var socketIo = require('../app_server/controllers/socket.js').socketServer(server); // Make sure this returns the socketio app.set('socketIo', socketIo); 

现在在每一个路线,你可以做到这一点:

 app.route('/test').get(function (req, res) { var socket = req.app.get('socketIo'); socket.emit('hello', 'world'); res.end(); }