【发布时间】:2015-06-16 12:37:17
【问题描述】:
在我的快速项目中,我调用“res.append”在同一个请求中设置多个 cookie。但是我收到了这样的错误“错误:发送后无法设置标头。”。 任何人都可以找出问题并给出解决方案或告诉其他更好的方法吗?
我的代码如下:
var setCookie = function(res, key, value, hrs, callback) {
if (typeof value === 'number'){value = value.toString(); }
if (typeof value === 'object'){value = JSON.stringify(value); }
var c;
if (hrs === 0) {
c = cookie.serialize(key, value, {httpOnly: true, path: '/', signed: true});
}
else {
c = cookie.serialize(key, value, {
maxAge: 3600 * hrs,
httpOnly: true,
path: '/',
signed: true
});
}
res.append('Set-Cookie', c);
callback(1);
};
var setLoginCookies = function(req, res, uaid, uuid, locale, trusted, callback) {
//sid
console.log('setLoginCookies:sid');
setCookie(res, 'sid', req.sessionID, 168, function () {
//uuid
console.log('setLoginCookies:uuid');
setCookie(res, 'uid', uuid, 168, function () {
//locale
console.log('setLoginCookies:locale');
setCookie(res, 'locale', locale, 0, function () {
callback(1);
});
});
});
};
错误:
GET / 200 748.366 ms - 5209
setLoginCookies:sid
D:\mongodb\Project\node_modules\connect-mongo\node_modules\mongodb\lib\utils.js:97
process.nextTick(function() { throw err; });
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (D:\mongodb\Project\node_modules\express\lib\response.js:700:10)
at ServerResponse.append (D:\mongodb\Project\node_modules\express\lib\response.js:670:15)
at setCookie (D:\mongodb\Project\com_modules\ran-doratupaala\app\libs\libCom.js:88:9)
at Object.setLoginCookies (D:\mongodb\Project\com_modules\ran-doratupaala\app\libs\libCom.js:123:5)
at D:\mongodb\Project\com_modules\ran-doratupaala\index.js:101:28
at D:\mongodb\Project\node_modules\express-session\session\store.js:43:5
at D:\mongodb\Project\node_modules\connect-mongo\lib\connect-mongo.js:437:9
at handleCallback (D:\mongodb\Project\node_modules\connect-mongo\node_modules\mongodb\lib\utils.js:95:12)
at D:\mongodb\Project\node_modules\connect-mongo\node_modules\mongodb\lib\collection.js:763:5
at D:\mongodb\Project\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\topologies\server.js:795:13
at Callbacks.emit (D:\mongodb\Project\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\topologies\server.js:94:3)
at null.messageHandler (D:\mongodb\Project\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\topologies\server.js:235:23)
at Socket.<anonymous> (D:\mongodb\Project\node_modules\connect-mongo\node_modules\mongodb\node_modules\mongodb-core\lib\connection\connection.js:259:22)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
16 Jun 19:58:05 - [nodemon] app crashed - waiting for file changes before starting...
【问题讨论】:
-
要准确了解请求到达时发生的情况,我们还需要堆栈跟踪中提到的部分周围的代码:
setCookie at com_modules\ran-doratupaala\app\libs\libCom.js:88:9、Object.setLoginCookies at com_modules\ran-doratupaala\app\libs\libCom.js:123:5和com_modules\ran-doratupaala\index.js:101:28。在您尝试设置标头之前,似乎已经有一些内容发送回客户端
标签: javascript node.js express web-applications