我得到了一个使用 socket.io 和 express 框架的简单聊天应用程序,下面是部分代码:
var app = express.createServer();
var socket = io.listen(app);
var store = new express.session.MemoryStore;
app.use(express.cookieParser());
app.use(express.session({
secret: 'something',
store: store,
cookie: {
maxAge: 60*60*24*30*1000
}
}));
app.get('/', function(req, res){
socket.on('connection', function(client) {
req.session.ioid = client.sessionId;
req.session.channel = req.param('channel');
req.session.username = req.param('username');
//I want the code below happen just once
res.header('Content-Type', 'text/plain');
res.header('Access-Control-Allow-Origin', '*');
res.send({sid:req.session.id});
});
});
您可以在 socket.on 闭包中看到 res.header 和 res.send。那些“res”将不断执行,并导致错误“发送后无法设置 header ”。
我正在寻找制作方 block 的方法-
res.header('Content-Type', 'text/plain');
res.header('Access-Control-Allow-Origin', '*');
res.send({sid:req.session.id});
-只发生一次。
最佳答案
app.get('/', function(req, res){
socket.on("connection", function(client) {
req.session.ioid = client.sessionId;
req.session.channel = req.param('channel');
req.session.username = req.param('username');
});
socket.once('connection', function(client) {
//I want the code below happen just once
res.header('Content-Type', 'text/plain');
res.header('Access-Control-Allow-Origin', '*');
res.send({sid:req.session.id});
});
});
使用.once
关于node.js - Nodejs - 如何让功能只发生一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6269285/