首页  >  问答  >  正文

为什么Postman中使用正确的URL的第二个GET请求总是执行第一个请求并返回其错误消息的响应?

<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>
P粉311617763P粉311617763405 天前413

全部回复(1)我来回复

  • P粉208469050

    P粉2084690502023-08-18 00:37:22

    听起来你在使用Express.js路由时,在Postman中进行两个不同的GET请求时遇到了意外行为。具体来说,当你发送一个请求到第二个路由(/allUser)时,你收到的是第一个路由(/:id)的响应。这种行为与你的期望不符。

    以下是一些你可以检查来解决问题的方法:

    路由顺序:确保Express路由器中的路由顺序是正确的。路由按照它们定义的顺序进行匹配。如果/:id路由在/allUser路由之前定义,它可能会捕捉到本应该发送到/allUser路由的请求。如果需要,可以交换路由的顺序。

    路由参数冲突:确保在/:id路由中定义的参数与/allUser路由的任何可能值不冲突。例如,如果你使用了通配符参数,比如/:id,它可能会意外地匹配到字符串"allUser"并触发错误的路由。如果需要,可以修改路由参数使其更具体。

    路由中间件:检查是否有应用到路由上的中间件可能会导致意外行为。在这种情况下,[auth]中间件可能会影响路由的处理方式。请检查中间件,确保它不会干扰路由的正常行为。

    路由路径重叠:仔细检查路由路径是否是不同且不重叠的。例如,如果路由路径是/allUser和/:id,Express在匹配传入请求到这些路由时不应该存在任何歧义。

    以下是你可以调整路由定义以提高清晰度的方法:

    // 在正确的顺序中定义路由
    router.get(
        "/allUser",
        usersController.getAllUser
    );
    
    router.get(
        "/:id",
        [auth],
        usersController.getUser
    );

    请记住,如果没有看到完整的代码和上下文,很难准确定位问题。然而,这些一般的故障排除步骤应该能帮助你识别和解决问题。

    回复
    0
  • 取消回复