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);