[英]Cannot GET from Express.js PUT route, why?
是否有任何原因无法从 Express.js router.put() 内部执行 GET 请求?
我有两条路线。 完全相同的 api 调用在 router.get() 路由中工作并挂在 router.put() 中。
我已经确认
这有效:
router.get('/:id', async (req, res) => {
const { headers } = req;
let result;
try {
result = await axios({ method:'get', url: '/some-url', headers });
} catch(error) {
res.status(500).send(new Error('myError');
}
res.send({ result });
});
这不起作用:
router.put('/:id', async (req, res) => {
const { headers } = req;
let result;
let finalResult;
try {
result = await axios({ method:'get', url: '/some-url', headers });
} catch(error) {
res.status(500).send(new Error('myError');
}
// logic based on the result of the above GET determines what the value of `finalResult`
finalResult = { some: 'data' };
res.send({ finalResult });
});
即使axios({ method:'get', url: '/some-url' })
在两条路由中完全相同,它在一个而不是另一个中工作。
router.put()
路由总是挂起很长时间,最终节点输出: Error: socket hang up, code: 'ECONNRESET', etc...
感谢任何帮助,我已经花了一天多的时间来解决这个问题。
不,快递中没有这样的东西。 尝试从邮递员或 curl 发出 GET 请求,看看是否有响应。 根本原因可能是您尝试发出的 get 请求无效,或者您发出 GET 请求的服务器可能已关闭。 您可以运行以下来验证
app.put('/',async (req, res) => {
let response = await axios.get('https://google.co.in');
console.log(response.data);
res.send({"works": "hello"});
});
我的问题的根本原因:
http 标头有一个Content-Length
键,它阻止了 GET 调用正确解析。
由于这些 api 调用发生在 router.put() 回调中,因此标题有一个Content-Length
指向要开始 PUT 的有效负载“主体”的大小。
解决方案:
在router.put() 中执行GET 时,从我的Headers 中删除Content-Length
字段,以便GET 具有除Content-Length
之外的所有其他Headers 数据
不幸的是,NodeJS 只是抛出了那个Error: socket hang up
消息,该消息并没有很好地描述潜在的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.