node.js - Nodejs - 如何让功能只发生一次?

标签 node.js

我得到了一个使用 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/

相关文章:

javascript - Node 使用mongoose插入大数据

jquery - 将 json 数据发布到 Express 应用程序正在获取 { }

node.js - OAuth 2.0 : Allowing for Client-Side (Implicit/Javascript) Authentication in a node. js/快速 API

javascript - Node js 如果条件不能正常工作

javascript - Node.js - jQuery。从服务器获取PDF并在前端显示

node.js - React、NodeJS、Express 和 Heroku。 HTTPS 不一致错误

javascript - 类型 'string | null' 不可分配给类型 'string' 。类型 'null' 不可分配给类型 'string'

javascript - NodeJs Mongoose Promise then/catch

javascript - Electron:如何最小化渲染过程中的窗口

mysql - Sequelize : Concat fields in WHERE LIKE clause