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

标签 node.js express socket.io

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

相关文章:

node.js - 查找用户并在该用户中插入产品

node.js - Express.js : Use Routers inside Routers

javascript - 如何从不包含express.static的文件夹中渲染模板?

node.js - Express App.error 不适用于 Node.js 0.8.0 我该怎么办

node.js - mongodb 实现中的嵌套文档,就像 Reddit 评论一样

node.js - 如何在 Node.js 中包含一个不是模块的文件(使其成为一个模块)?

javascript - Heroku 套接字轮询的响应时间较长

javascript - 使用socket.io与 react 问题

node.js - Node.js 上的 Azure Easy API 'No route registered for '/api/xxx'?

javascript - socket.io 和服务器