【发布时间】:2020-01-11 20:08:58
【问题描述】:
您是否有任何原因无法从 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() 路由总是挂了很长时间,最终 Node 输出:
Error: socket hang up, code: 'ECONNRESET', etc...
感谢您的帮助,我花了一天多的时间来解决这个问题。
【问题讨论】:
-
Express 中的
put请求处理程序是否被调用?如果是这样,它会走多远?如果它卡在 axios 调用上,你能告诉我们那个 axios 调用的实际代码吗?您是否单独测试了特定的 axios 调用? -
是的,它到达了那个路由,并且能够进行它需要的所有其他 axios 调用。是的,我已经单独对其进行了测试,因为我指出该调用在 router.get() 回调中工作。我无法共享该代码的代码,因为它包含有关公司系统的许多细节,但它与我在示例中显示的几乎相同。
-
好吧,我不知道您希望我们在这里能做什么,而无需查看实际代码或能够自己运行并调试它。
-
@jaimefps 签名不应该是
async (req, res)...你怎么能在不抛出异常的情况下做到res.send? -
顺便说一句,尝试学习如何调试代码...启动 VSCode 并在本地运行时附加该进程,然后只需添加一个断点并使用
PUT作为动词命中该端点...
标签: node.js express axios crud