gpt4 book ai didi

javascript - 带参数的 Node.js 和 Express 路由

转载 作者:行者123 更新时间:2023-11-29 21:34:54 26 4
gpt4 key购买 nike

我目前在 node.js 中有 2 条路由用于我正在构建的 API。它们是:

app.get('/api/v1/user/:userid', function (req, res) {
return res.status(200).json(GetUser());
});

app.get('/api/v1/user', function (req, res) {
return res.status(400).json('UserId expected');
});

如你所见,这两条路线其实应该合二为一,例如:

app.get('/api/v1/user/:userid', function (req, res) {
console.log('this should still show if :userid is not populated, but it does not');

if(!req.params.userid)
return res.status(400).json('UserId expected');

return res.status(200).json(GetUser());
});

但是,当我在没有指定 :userid 的情况下使用 Postman 测试上述端点时,我会超时。显然,如果我提供一个 :userid,我就会得到相应的用户。

我还发现,当未指定 :userid 时,console.log 永远不会出现在终端中。这是我的终端输出:

this should still show if :userid is not populated, but it does not
GET /api/v1/user/56a6861675774c1a046bf780 200 3.140 ms - 274
GET /api/v1/user/ - - ms - -

以上所有内容让我相信,因为 :useridundefinednull,所以它破坏了 express 中间件。该假设是否正确?我该如何克服它?

最佳答案

假设是正确的。为 /api/v1/user/:user_id 定义的处理程序不能用于 /api/v1/user。因此,路由 /api/v1/user/ 将无法处理“GET”请求。

您需要为不同的路由定义不同的处理程序。

一个解决方案是使用 Express router定义路由的中间件。

var router = express.Router();
router.route('/api/v1/user')
.get(); // define handler for multiple resources here.

router.route('/api/v1/user/:user_id')
.get(); // define handler for single resource here.

app.use('/', router);

关于javascript - 带参数的 Node.js 和 Express 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com