为什么Postman中使用正确的URL的第二个GET请求总是执行第一个请求并返回其错误消息的响应?
P粉311617763
2023-08-17 11:53:17
<p>我有两个GET请求,但是在Postman中,如果我用正确的URL点击第二个GET请求,那么总是会运行第一个请求,并给出第一个请求的响应。优化问题</p>
<pre class="brush:php;toolbar:false;">router.get(
"/:id",
[auth],
usersController.getUser
);
router.get(
"/allUser",
[auth],
usersController.getAllUser
);</pre>
<p>用户控制器文件和相关方法</p>
<pre class="brush:php;toolbar:false;">exports.getUser = async (req, res) => {
const id = req.params.id;
try {
let result = await userService.getUserAccount(id);
if (result) {
const resultWithoutPassword = {...result};
delete resultWithoutPassword.password;
return res.status(HttpCodes.OK).send(resultWithoutPassword);
}
//console.error("error: Not Found.");
return res.status(HttpCodes.NOT_FOUND).send(AppMessages.USER_NOT_FOUND);
} catch (error) {
return res.status(HttpCodes.INTERNAL_SERVER_ERROR).json(
{
Error: AppMessages.INTERNAL_SERVER_ERROR,
Message: "Id Should be an Integer."
});
}
}
try{
let result = await userService.getAllUserAccounts();
return res.status(httpCodes.OK).json(result);
}
catch(err){
return
res.status(httpCodes.INTERNAL_SERVER_ERROR).json({ERROR:
AppMessages.INTERNAL_SERVER_ERROR});
}
}</pre>
<p><br /></p>
听起来你在使用Express.js路由时,在Postman中进行两个不同的GET请求时遇到了意外行为。具体来说,当你发送一个请求到第二个路由(/allUser)时,你收到的是第一个路由(/:id)的响应。这种行为与你的期望不符。
以下是一些你可以检查来解决问题的方法:
路由顺序:确保Express路由器中的路由顺序是正确的。路由按照它们定义的顺序进行匹配。如果/:id路由在/allUser路由之前定义,它可能会捕捉到本应该发送到/allUser路由的请求。如果需要,可以交换路由的顺序。
路由参数冲突:确保在/:id路由中定义的参数与/allUser路由的任何可能值不冲突。例如,如果你使用了通配符参数,比如/:id,它可能会意外地匹配到字符串"allUser"并触发错误的路由。如果需要,可以修改路由参数使其更具体。
路由中间件:检查是否有应用到路由上的中间件可能会导致意外行为。在这种情况下,[auth]中间件可能会影响路由的处理方式。请检查中间件,确保它不会干扰路由的正常行为。
路由路径重叠:仔细检查路由路径是否是不同且不重叠的。例如,如果路由路径是/allUser和/:id,Express在匹配传入请求到这些路由时不应该存在任何歧义。
以下是你可以调整路由定义以提高清晰度的方法:
请记住,如果没有看到完整的代码和上下文,很难准确定位问题。然而,这些一般的故障排除步骤应该能帮助你识别和解决问题。