2016-03-08 51 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