发送后无法设置标头

时间:2014-09-03 06:44:03

标签: node.js express http-headers

我之前在这里遇到过一个问题,但我没有'知道为什么它会发生在我的应用程序中#34;我发现"无法在发送后设置标题"每当我去路线/时都会出错。我确定我遗漏了一些基本的东西。我查看了文档,我在这里查看了其他答案,但我似乎仍然无法理解为什么会这样。有人可以介绍一下这个错误发生的原因吗?

当我将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);`

2 个答案:

答案 0 :(得分:0)

您可以根据需要随时拨打res.setHeader(name, value),直到您拨打res.writeHead(statusCode)。在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)

答案 1 :(得分:0)

<强> SetHeader可以

为隐式标头设置单个标头值。如果此标头已存在于待发送标头中,则其值将被替换。如果您需要发送多个具有相同名称的标头,请在此处使用字符串数组。

在这里给出:

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

WriteHead

向请求发送响应标头。状态代码是一个3位HTTP状态代码,如404.最后一个参数headers是响应头。可选地,可以将人类可读的reasonPhrase作为第二个参数。

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

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

在这里给出:

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