2015-11-20 3 views
0

я сделал это с нуля, и она по-прежнему дает мне ошибку ...Экспресс не будет посылать заголовки

Я бежал

express test 

затем

cd test && npm install 

I 'ed отредактировал app.js, добавив маршрут, такой как:

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

Тогда I'v е запустить узел

node app.js 

И когда я пытаюсь получить доступ к http://server/test я получаю

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

Я использую Node v4.2.1, Экспресс 2.5.8, 3.4.0 НПМ.

Это происходит только с Express, если я создаю простой сервер на узле, я могу использовать writeHead.

+0

Если вы сделали это с нуля, почему, черт возьми, вы используете версию 2.x?!?! Он не обновлялся с 2012 года. – cdbajorin

ответ

1

Когда res.writeHead(200, {"Content-Type": "application/json"});, вы посылаете все заголовки ответа клиенту, так что вы не можете отправить заголовок снова.

Поскольку res.send является функцией объекта ответа Express, я смотрю исходный код этой функции отправки:

enter image description here

  • кусок, что вы пришли сюда: String ('{ „а“ : 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); 
}); 
Смежные вопросы