My code:
function tokenReceived(response, error, token) {
if (error) {
console.log("Access token error: ", error.message);
response.writeHead(200, {"Content-Type": "text/html"});
response.write('<p>ERROR: ' + error + '</p>');
response.end();
}
else {
var cookies = ['node-tutorial-token=' + token.token.access_token + ';Max-Age=3600',
'node-tutorial-email=xxxx@xxx.xx;Max-Age=3600'];
console.log("cookies: ", cookies);
response.setHeader('Set-Cookie', cookies);
response.writeHead(200, {"Content-Type": "text/html"});
response.write('<p>Access token saved in cookie.</p>');
response.end();
}
}
My error:
错误:发送后无法设置标头 . 在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:344:11)的tokenReceived(D:\ node-tutorial \ index.js:47:14)at:D:\ node-tutorial \ authHelper.js:41:9 at tryCatcher (D:\ node-tutorial \ node_modules \ bluebird \ js \ main \ util.js:26:23)在Promise.successAdapter(D:\ node-tutorial \ node_modules \ bluebird \ js \ main \ nodeify.js:23: 30)在Promise._settlePromiseAt(D:\ node-tutorial \ node_modules \ bluebird \ js \ main \ promise.js:579:21)的Promise._settlePromises(D:\ node-tutorial \ node_modules \ bluebird \ js \ main \ promise.js:697:14)在Async._drainQueue的Async._drainQueue(D:\ node-tutorial \ node_modules \ bluebird \ js \ main \ async.js:123:16)中(D:\ node-tutorial \ node_modules \ bluebird \ js \ main \ async.js:133:10)在ImmediateImmediate的Immediate.Async.drainQueues [as _onImmediate](D:\ node-tutorial \ node_modules \ bluebird \ js \ main \ async.js:15:14) [as _immediateCallback](timers.js:383:17)
3 回答
response.setHeader
只是设置一个单数 Headers .response.writeHead
是设置多个 Headers .试试这种方式:
response.setHeader()
和response.writeHead()
写入(和提交)标头 .你应该这样做
要么
这个问题是因为你发送了两次响应(第一次使用writeHead,第二次使用write) . 尝试使用response.status(200).send(data)