2015-06-17 1 views
0

По какой-то причине тело в наших почтовых запросах пуста. Браузер отправляет данные, мы можем видеть, что тело присутствует на нашем сервере NGINX, но как только он прибывает на сервер node.js, похоже, отсутствует.Что может привести к тому, что тело запроса станет пустым в node.js express?

Я использовал «Util», чтобы распечатать весь запрос, который огромен, поэтому я думал, что список «тело-родственный» атрибуты ниже

parser: 
.....  
onBody: [Function: parserOnBody], 
    .... 
_httpMessage: 
    .... 
    _hasBody: true, 

.... 

body: {}, 

все другие данные, кажется, есть, файлы cookie и т. д. объект запроса также содержит всю информацию о маршрутизации. Может ли причина «parserOnBody»?

Это не происходит для всех маршрутов, запросы POST для других маршрутов содержат тело.

node.js запущен в контейнере, сервер nginx работает на хосте-os, может возникнуть проблема с пересылкой запроса?

Ниже начало нашего метода

// add answer 
app.post('/questions/:id([0-9a-fA-F]{24})/answers' 
, passport.authenticate('token', { session: false }) 
, fetch(models.Question) 
, stream() 
, function(req, res) { 
//console.log('add answer req '+util.inspect(req, false, null)); 
var question = req.model; 

var answer = req.body; 
console.log('add answer body '+util.inspect(answer, false, null)); 

Закомментированная линия печатает огромный запрос, въездные печатает второй журнал {}. Я знаю, что console.log следует избегать, но мне нужен способ, чтобы транспортировать свои выводы ...

+0

Как вы извлекаете тело из запроса? –

+1

Вы отправляете 'multipart/form-data'? – robertklep

+0

@KevinB У меня есть вопрос с кодом ... – mpjjonker

ответ

0

После осмотра parseBody межплатформенного я обнаружил, что ContentLength по запросу . Парсер завершает: no body, который кажется правильным.

Я добавил формат журнал отладки для сервера Nginx

log_format debug '[$time_local] "$request" ' 
        ' "#$http_transfer_encoding" [$http_content_length] ' 
       '"$request_length" [$request_body_file]'; 

Когда мы повторим сценарий ошибки, мы видим два запроса, пришедшим к первому дает оценку content_length нуля, что объясняет пустое тело наш сервер node.js. Второй один не приходит ...

[18/Jun/2015:13:18:31 +0200] "POST /api/questions/558138bdde3afb400400001d/answers HTTP/1.1" "#-" [0] "890" [-] 
[18/Jun/2015:13:18:31 +0200] "POST /api/questions/558138bdde3afb400400001d/answers HTTP/1.1" "#-" [1623] "2383" [-] 

Вторых линии с соответствуют своей линии мы получаем, когда мы имеем запрос успешный.

Проблема остается, но это больше не проблема node.js express. Отсюда и этот ответ.