2014-09-03 7 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 –

+0

Благодаря @WaqasAhmed, но я пытаюсь понять, что происходит здесь, не расфасованная бинт на него. Однако я ценю вашу помощь. –

ответ

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) 
0

SetHeader:

Устанавливает одно значение заголовка для неявных заголовков. Если этот заголовок уже существует в отправляемых заголовках, это значение будет заменено. Используйте массив строк здесь, если вам нужно отправить несколько заголовков с тем же именем.

Как Учитывая здесь:

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

WriteHead:

посылает заголовок ответа на запрос. Код состояния представляет собой трехзначный код состояния HTTP, например 404. Последний аргумент, заголовки, являются заголовками ответов. По желанию, в качестве второго аргумента можно привести удобочитаемый разум.

Этот метод следует вызывать только один раз в сообщении, и он должен быть вызван до вызова response.end().

Если вы вызываете response.write() или response.end() перед вызовом этого, будут вычислены неявные/изменяемые заголовки и вызовите эту функцию для вас.

Как Учитывая здесь:

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

Смежные вопросы