首页 文章

发送后无法设置标头

提问于
浏览
0

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 回答

  • 1

    response.setHeader 只是设置一个单数 Headers .

    response.writeHead 是设置多个 Headers .

    试试这种方式:

    response.writeHead(200, {
            "Content-Type": "text/html",
            "Set-Cookie": cookies
        });
    
  • 1

    response.setHeader()response.writeHead() 写入(和提交)标头 .

    你应该这样做

    response.statusCode = 200;
    response.setHeader('Content-Type', 'text/html');
    response.setHeader('Set-Cookie', cookies);
    

    要么

    response.writeHead(200, {
        'Content-Type': 'text/html',
        'Set-Cookie': cookies
    });
    
  • -2

    这个问题是因为你发送了两次响应(第一次使用writeHead,第二次使用write) . 尝试使用response.status(200).send(data)

相关问题