為什麼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在匹配傳入請求到這些路由時不應該有任何歧義。
以下是你可以調整路由定義以提高清晰度的方法:
請記住,如果沒有看到完整的程式碼和上下文,很難準確定位問題。然而,這些一般的故障排除步驟應該可以幫助你辨識和解決問題。