express - 如何解决挂起 /POST 请求与 Express 的正文
问题描述
我希望有人能指出我正确的方向。我正在使用http
发送请求来表达并且请求只是挂起,如果我重新启动我的快递服务器,它将返回 500 内部服务器错误,或者以“请求中止”重新启动客户端。奇怪的是,似乎只有当我提交带有正文的 /POST 请求时 - 但是没有正文的 POST 请求可以正常工作。
这是我的要求:
const the_Headers = {
Authorization: "Bearer <token>",
"x-custom-header": "custom-header-val",
"content-type": "application/json",
"content-length": "21",
}
const data = "{\"test\":\"123\"}"
const result = await new Promise((resolve,reject) => {
const request = http.request(
new URL("http://localhost/some/path"),
{headers: the_Headers, method: POST},
(res) => {
res.setEncoding('utf8');
let responseBody = '';
res.on('data', (chunk) => {
responseBody += chunk;
});
res.on('end', () => {
resolve({body: responseBody});
});
});
request.on('error', (err) => {
reject({statusCode: 500, error: err});
});
if (data)
request.write(data);
request.end();
})
});
这是我的路由器:
router.post("/some/path",
async (req, res) => {
// makes it to this breakpoint with empty(no body) POST request
res.status(200)
.json({ message: "body is: " + req.body.toString()});
})
这是输出DEBUG=express:*
express:router dispatching POST /some/path +7s
express:router query : /some/path +1ms
express:router expressInit : /some/path +0ms
express:router urlencodedParser : /some/path +0ms
express:router jsonParser : /some/path +1ms
... (does not proceed from here - so assuming problem with jsonParser)
解决方案
这是内容长度不匹配。
标头传递的长度为 21 - 当数据为 14 时。这导致 jsonParser 中的读取流从不调用 end() 方法。