Express – 如何在路由文件中使用io.socket.emit?

我有一个快递(nodeJS)的应用程序。

当在DB上写入一些数据时,要发出io.socket,所以需要在路由文件(例如/routes/save.js)中发出,

这是我的app.js

var express = require('express'); var save = require('./routes/save'); var http = require('http'); var app = express(); var server = require('http').Server(app); var io = require('socket.io')(server); ...... io.on('connection', function(socket){ socket.on('newTweet', function(msg){ io.emit('newTweet', msg); }); }); app.use('/save', save); ..... module.exports = app; server.listen(3000, function () { var host = server.address().address var port = server.address().port }) 

你能帮我写io.socket.emit('event')/routes/save.js吗?

我find了一个方法。

app.use('/save', save);之前app.use('/save', save); 需要在app.js编写下面的代码

 app.use(function(req, res, next) { req.io = io; next(); }); 

然后在save.js中从req参数中获得io

 var express = require('express'); var router = express.Router(); router.post('/', function(req, res, next) { ..... var io = req.io; io.emit('newTweet', 'test'); ..... }); module.exports = router; 

如果你知道比这更好的方式,请让我知道。

您可以将io对象传递给您的路由,如下所示:

 var app = express(); var io = socket_io(); app.io = io; require('./routes/index')(app,io); 
 import {createServer} from 'http'; import express from 'express'; import socketio from 'socket.io'; const server = createServer(app); const io = socketio.listen(server); app.use(function (req, res, next) { req.io = io; next(); }) app.get('/', function (req, res) { const ioConnection = req.io; ioConnection.emit('nouveau_client', body.pseudo); }); io.sockets.on('connection', function (socket) { socket.on('nouveau_client', function (user) { socket.broadcast.emit('nouveau_client', user.pseudo); }); }); server.listen(3000);