2015-11-20 27 views
0

我從頭做到了這一點,它仍然給了我一個錯誤...Express將不會發送標題

我已經運行

express test 

然後

cd test && npm install 

我已編輯app.js添加這樣的路線:

app.get('/test',function(req,res) { 
    res.writeHead(200, {"Content-Type": "application/json"}); 
    return res.send('{"a":3}'); 
}); 

然後,我' E運行節點

node app.js 

,當我嘗試訪問http://server/test我得到

Error: Can't set headers after they are sent. 

我使用 節點V4.2.1,快速2.5.8,3.4.0 NPM。

這只是發生在Express,如果我在節點上創建一個簡單的服務器,我可以使用writeHead。

+0

如果你從頭開始做這個,爲什麼在你使用的是2.x版本?!?!它自2012年以來一直未更新。 – cdbajorin

回答

1

res.writeHead(200, {"Content-Type": "application/json"});,所有發送的響應報頭到客戶端,所以你不能再發送頭。

因爲res.send是明確的迴應對象的功能,我看這個發送功能的源代碼:

enter image description here

  • 塊是你送來的:字符串(「{‘一’ :3}「)

  • this.set('Content-Type', setCharset(type, 'utf-8'))此表示可以幫助我們CONCAT我們的內容類型使用UTF-8所以服務器需要重新發送頭

這就是爲什麼你會得到錯誤。

Ps。 對不起,我的英語不好,我希望你明白我想說明的。

+0

非常感謝!我終於明白了爲什麼會發生這種情況,這讓我發瘋=)當然,解決方案是使用setHeader作爲@TLJ的說法,但知道爲什麼這種方式不起作用真是太好了。 –

+0

請將您的答案標記爲已接受,所以此問題不會被解決。 –

1

怎麼樣使用res.setHeader

var express = require('express'); 
var app = express(); 

app.get('/', function (req, res) { 
    res.setHeader("Content-Type","application/json"); 
    res.send('{}'); 
}); 

var server = app.listen(3000, function() { 
    var host = "localhost"; 
    var port = server.address().port; 

    console.log('Example app listening at http://%s:%s', host, port); 
}); 
相關問題