由于某种原因,我们的帖子请求中的正文是空的。 浏览器正在发送数据,我们可以看到机身存在于我们的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,但我需要一种方法来传输我的发现......
答案 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表达的问题。因此这个答案。