我正在使用 node.js 和 express.js 编写一个简单的聊天应用程序,感觉自己做错了什么。聊天本身在第一页加载时工作正常,但在每次重新加载页面时,我都会将所有消息打印两次或更多(取决于页面重新加载的数量)。看起来我在每次重新加载页面时都会创建新的侦听器。据我了解,我需要从路由器处理程序中移出侦听器代码(io.socket),但我不知道在哪里移动以及稍后如何调用它,以及页面请求上的渲染页面。任何帮助表示赞赏。谢谢。
这是我的应用程序代码:
./app.js
var express = require("express");
var app = express();
var test = require("./routes/test")
var port = 3000;
app.set("port", port);
app.set("views", __dirname + "/views");
app.set("view engine", "jade");
app.get("/test", test.test);
var io = require("socket.io").listen(app.listen(port));
app.set("io", io);
console.log("Listening on port " + port);
和 ./routes/test.js
exports.test= function(req, res) {
res.render('test');
var app = req.app;
var io = app.get('io');
io.sockets.on('connection', function (socket) {
socket.emit('message', { message: 'welcome to the chat' });
socket.on('send', function (data) {
io.sockets.emit('message', data);
});
});
}