2016-03-08 48 views
0

后我的代码:无法设置页眉他们派出

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', 
        '[email protected];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(); 
    } 
} 

我的错误:

Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11) at 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) at Promise.successAdapter (D:\node-tutorial\node_modules\bluebird\js\main\nodeify.js:23:30) at Promise._settlePromiseAt (D:\node-tutorial\node_modules\bluebird\js\main\promise.js:579:21) at Promise._settlePromises (D:\node-tutorial\node_modules\bluebird\js\main\promise.js:697:14) at Async._drainQueue (D:\node-tutorial\node_modules\bluebird\js\main\async.js:123:16) at Async._drainQueues (D:\node-tutorial\node_modules\bluebird\js\main\async.js:133:10) at Immediate.Async.drainQueues [as _onImmediate] (D:\node-tutorial\node_modules\bluebird\js\main\async.js:15:14) at processImmediate [as _immediateCallback] (timers.js:383:17)

+0

是我们的错误或成功案例? –

+0

@RolandStarke我在成功案例 – Mercer

+0

啊! setHeader vs writeHead case,这里使用的节点版本是什么? –

回答

1

response.setHeader只是设置一个单一的标题。

response.writeHead是设置多个标题。

试试这个方法:

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

有人可以解释为什么这个工作,但OP的批准dosn't? nodejs以'.setHeader'和'.writeHead'为例。请参阅:https://nodejs.org/docs/latest/api/http.html#http_response_setheader_name_value –

+0

@RolandStarke您可以尝试可能的组合,有时候当您严重卡住时,只需寻求解决方案,即可正常工作 –

-2

这个问题是怎么一回事,因为你送的响应两次(在第一次用writeHead和第二次写入)。尝试使用response.status(200).send(data)

+0

它在'如果'条件正常我写这两次 – Mercer

+0

修改头使用response.setHeader('access_token',令牌),然后使用response.status(200).send(data) –

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 
}); 
+0

'TypeError:response。状态不是功能' – Mercer