什么可以导致请求体在node.js中变空?

时间:2015-06-17 19:37:02

标签: node.js nginx

由于某种原因,我们的帖子请求中的正文是空的。 浏览器正在发送数据,我们可以看到机身存在于我们的NGINX服务器中,但是一旦它到达node.js服务器似乎丢失了。

我使用了' util'打印出整个请求,这是巨大的,所以我想我会列出"身体相关的"

以下的属性
parser:
.....      
onBody: [Function: parserOnBody],
    ....
 _httpMessage:
  ....
    _hasBody: true,

....

body: {},

所有其他数据似乎都在那里,cookies等...... 请求对象还包含所有路由信息。 " parserOnBody"是原因?

并非所有路由都发生,其他路由的POST请求确实包含正文。

node.js在容器中运行,nginx服务器在host-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,但我需要一种方法来传输我的发现......

1 个答案:

答案 0 :(得分:0)

在检查parseBody中间件后,我发现请求的内容长度 0 。解析器得出结论:没有正文,这似乎是正确的。

我为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表达的问题。因此这个答案。