2014-09-03 95 views
0

我有一个问题,我之前在这里看到过,但我不知道为什么发生在我的“应用程序”中。无论何时我只要前往路线/,我都会收到“发送后无法设置标题”错误。我相信我错过了一些基本的东西。我查看了文档,并且在这里查看了其他答案,但我仍然无法明白为什么会发生这种情况。有人可以通过解释为什么会出现这个错误吗?发送后无法设置标题

当我将writeHead更改为setHeader时,所有事情都会相应地进行。除了/之外,我还会在哪里发送标题?

// Basic Setup 
var express = require('express') 
, app = express() 
, bodyParser = require('body-parser') 
, port = process.env.PORT || 3000; 

// Middleware 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 

// Setup Routes 
var router = express.Router(); 

router.get('/about', function(req, res){ 
    res.json({name: "tester"}); 
}); 

router.get('/', function(req, res){ 
    res.writeHead('200', {"Content-Type": 'text/html'}); 
    res.send("<html><head></head><body>Welcome to something. Sent from server.</body>  </html>"); 
}); 

app.use('/', router); 

app.listen(port); 
console.log("listening on port " + port);` 
+0

使用res.setHeader代替res.writeHead的 – 2014-09-03 07:14:33

+0

感谢@WaqasAhmed,但我想了解是怎么回事,没有把创可贴就可以了。虽然我感谢你的帮助。 – 2014-09-03 07:17:04

回答

0

你被允许经常只要你想,直到你打电话res.writeHead(statusCode)调用res.setHeader(name, value)。在writeHead之后,标题将被烘焙,您只能致电res.write(data),最后res.end(data)

试试这个:

Any exceptions within middleware function(req, res, next) (Connect/Express only) 
res.send(body|status[, headers|status[, status]]) (Express only) 
0

SetHeader可以

设置隐头一个头值。如果这个头文件已经存在于待发送头文件中,它的值将被替换。如果您需要发送多个具有相同名称的标题,请在此使用字符串数组。

给出这里:

http://nodejs.org/docs/v0.4.0/api/http.html#response.setHeader

WriteHead

发送响应报头添加到请求。状态码是一个3位数的HTTP状态码,如404.最后一个参数,标题,是响应标题。可选地,可以给人类可读的reasonPhrase作为第二个参数。

此方法只能在消息中调用一次,并且必须在调用response.end()之前调用该方法。

如果在调用此方法之前调用response.write()或response.end(),将会计算隐式/可变标题并为您调用此函数。

给出这里:

http://nodejs.org/docs/v0.4.0/api/http.html#response.writeHead

相关问题