错误:无法设置头发送之后。当自动重新连接到MongoDB的

问题描述 投票:0回答:2

我收到以下错误:

Error: Can't set headers after they are sent. 
       at ServerResponse.OutgoingMessage.setHeader (http.js:708:11) 
       at ServerResponse.res.setHeader (/home/rahul/workspace1/iranproud/node_modules/express/node_modules/connect/lib/patch.js:63:22) 
       at next (/home/rahul/workspace1/iranproud/node_modules/express/node_modules/connect/lib/proto.js:156:13) 
       at next (/home/rahul/workspace1/iranproud/node_modules/express/node_modules/connect/lib/middleware/session.js:318:9) 
       at /home/rahul/workspace1/iranproud/node_modules/express/node_modules/connect/lib/middleware/session.js:342:9 
       at /home/rahul/workspace1/iranproud/node_modules/connect-mongo/lib/connect-mongo.js:220:17 
       at /home/rahul/workspace1/iranproud/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/collection.js:953:5 
       at Cursor.nextObject (/home/rahul/workspace1/iranproud/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:678:5) 
       at commandHandler (/home/rahul/workspace1/iranproud/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:658:14) 
       at Server.Base._callHandler (/home/rahul/workspace1/iranproud/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/base.js:382:41)

我的配置如下:

我使用的连接 - 蒙戈的会话存储,并自动重新连接是真实的,即。

app.use(express.session({

 store: new MongoStore({
        url: 'mongodb://192.168.1.104:27017/db_ip',
        auto_reconnect:true

    }, function(e) {
        //code
    }),
    cookie: {
        expires: new Date(Date.now() + 7200000)
    },    
    secret: '*********'
}));

我通过手动停止mongod的服务测试此代码和URL请求,它是在(连续浏览器中运行,直到它被连接到数据库)等待状态,所以我一直对请求超时下面的代码(后4其次,它会在维护页面重定向到)。

app.use(function(req, res, next){

    res.setTimeout(4000, function(){
        console.log('Request has timed out.');

        var fullURL = req.protocol + "://" + req.get('host') + req.url;
        var client_ip = req.connection.remoteAddress;
        console.log("\nRequested Url is : " + fullURL + " :: From IP Address : " + client_ip + " : on date : " + new Date()); 
         res.render('undermaintenance');
        });

   next();

});

但是当我重新启动的mongod它会自动连接到数据库和网站工作,但在控制台中我得到这个错误:

Error: Can't set headers after they are sent.
node.js mongodb http-headers response.redirect connect-mongo
2个回答
0
投票

我在想什么是,1 - 下一个被调用,响应被发送到客户端,但2-- 4秒钟后,你要发送res.render()..这也得到呼吁。没有看到完整的代码我不知道如何帮助你。

app.use(function(req, res, next){



    res.setTimeout(4000, function(){
        console.log('Request has timed out.');

        var fullURL = req.protocol + "://" + req.get('host') + req.url;
        var client_ip = req.connection.remoteAddress;
        console.log("\nRequested Url is : " + fullURL + " :: From IP Address : " + client_ip + " : on date : " + new Date()); 
         res.render('undermaintenance'); // ---2

        });

   next(); ---> 1


});

0
投票

每当你看到一个有关的事实,你不能发送头两次的消息,这意味着你要发送一个特定的HTTP请求的响应不止一次。你的代码(或依赖)的某些部分已经发送的响应。检查所有自定义的中间件,并确保在res.setTimeout()回调不执行每一次,即使是非常超时后。

© www.soinside.com 2019 - 2024. All rights reserved.