gpt4 book ai didi

node.js - 在 Express 路由中使用 "socket"(不是 "io")

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:57 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com