我对 io.emit()
和 socket.emit()
之间区别的理解是 io 发送到所有连接的客户端,而 socket.emit()
仅发送到连接的客户端。
我已经看到了 express 的模式,您可以将 io 实例绑定(bind)到响应,然后在路由处理程序中使用它...
const io = require('./socket/index')(server);
app.use((req, res, next) => {
res.io = io;
next();
});
如何将“套接字”附加到请求/响应对象,以便仅向连接的客户端发出事件?
例如:
app.use((req, res, next) => {
io.on('connection', (socket) => {
res.socket = socket;
});
next();
});
app.post('/upload', (req, res) => {
// emits only to the client in question
res.socket.emit('upload started');
})
最佳答案
如果您在 app.js 中的 var app =express(); 下使用 Express 生成器添加以下行
var server = require('http').Server(app);
var io = require('socket.io')(server);
现在,在 app.js 的末尾,您将看到 module.exports = app;将其更改为
module.exports = {app: app, server: server};
接下来,在编辑器中打开 bin/www。更改,var app = require('../app');进入
var app = require('../app').app;
然后更改 var server = http.createServer(app);进入
var server = require('../app').server;
打开 app.js 备份并添加此中间件
app.use(function(req, res, next){
res.io = io;
next();
});
现在您可以使用代码发出
/* GET users listing. */
router.get('/', function(req, res, next) {
res.io.emit("emit", "users");
res.send('respond with a resource.');
});
关于node.js - 在 Express 路由中使用 "socket"(不是 "io"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102323/