我有以下路由器:
/* GET /users/username */
router.get("/:username", function(req, res, next) {
User.findOne({
username: req.params.username
}).exec(function(err, user) {
if (err) return next(error);
res.json(user);
});
});
/* GET /users/id */
router.get("/:id", function(req, res, next) {
User.findById(req.params.id, function(err, user) {
if (err) return next(err);
res.json(user);
});
});
按照上述顺序,/* GET /users/id */
将返回null,如果我交换顺序,则/* GET /users/username */
将导致此错误:
在模型“用户”的路径“ _id”处,对值“来宾”的对象ID广播失败
基本上,第二个中间件被忽略。但是,这两种行为都是必需的。我正在使用AngularJS $resource
与RESTful服务器端数据源进行交互。
答案 0 :(得分:0)
最好通过以下方式进行路由: router.route('您的/ route')。get(aJsFile.function);
然后,而不是执行,只写 属性:['id','用户名'] 其中:{username:username} 或类似的东西。
答案 1 :(得分:0)
第二个中间件将被忽略,因为url模式相同...您希望路由器如何区分“用户名”或“ id”;
您必须首先检查每个示例是否为id。
router.get("/:username", function(req, res, next) {
const username = req.params.username;
if (!isNaN(parseInt(username)) { // <------ Check if it's an ID
next();
} else {
User.findOne({
username: req.params.username
}).exec(function(err, user) {
if (err) return next(error);
res.json(user);
});
}
});
/* GET /users/id */
router.get("/:id", function(req, res, next) {
User.findById(req.params.id, function(err, user) {
if (err) return next(err);
res.json(user);
});
});