我目前在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
,我会得到相应的用户。
此外,我发现在console.log
未指定时,:userid
将永远不会显示在终端中。这是我的终端输出:
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 - -
所以上述所有因素都让我相信,因为:userid
是undefined
或null
,它正在破坏快速中间件。这个假设是否正确,我该如何克服它?
答案 0 :(得分:2)
假设是正确的。为/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);