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

zsa*_*ayn 7 javascript rest node.js socket.io

我正在尝试从我的宁静 api 发出 socket.io 事件。

我当前的设置如下所示:

app.js 设置一个 express 应用程序并创建所有必要的路由,例如:

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

server.js 创建一个服务器并连接 express 应用程序和 socket.io

var http = require('http');
var server = http.createServer(app);

require('../app_server/controllers/socket.js').socketServer(server);
Run Code Online (Sandbox Code Playgroud)

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

但是,我想要做的是从我的宁静 api 调用 socket.js 方法,我不知道如何连接它。

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

谢谢

mic*_*lem 12

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

因此,在app.js您创建套接字,然后将其保存在应用程序中:

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

app.set('socketIo', socketIo);
Run Code Online (Sandbox Code Playgroud)

现在,在每条路线中,您都可以这样做:

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