【发布时间】:2017-12-07 07:46:39
【问题描述】:
我需要能够从我的 socket.io 事件监听器访问 req。所以我这样做了:
服务器
var express = require('express'),
app = express(),
app.set('view engine', 'pug');
app.use(express.static(__dirname + '/public'));
client = require('socket.io').listen(8080).sockets;
app.get('/', function (req, res) {
client.on('connection', function (socket) {
console.log("Connection")
});
res.render('chat');
});
app.listen(config.server.port, function() {
console.log("Listening on port " + config.server.port);
});
客户:
try {
var socket = io.connect('http://127.0.0.1:8080');
} catch(e) {
//Set status to warn user
console.log(e);
}
问题在于,如果您在快速路由处理程序中添加 socket.io 事件侦听器,则会在套接字上创建多个侦听器。如果您要创建 pug 文件并测试此代码,您会注意到控制台在第一次刷新时记录“连接”一次,第二次刷新两次,依此类推,因为每次处理路由时都会添加另一个事件侦听器。我可以通过将侦听器移到路由处理程序之外来修复它,但是我需要能够访问“req”。是否有任何解决方案可以让我访问“req”并防止添加过多的侦听器?
【问题讨论】:
标签: javascript node.js express socket.io