我有一个Express应用程序,遇到了一个我应该知道如何解决的问题。
我有这个我想要获取的网址
http://localhost:3000/users/546c2b15a340bb881f853fa6/teams/newTeam
然而,我收到此错误:
CastError: Cast to ObjectId failed for value "newTeam" at path "_id"
简单的解决方案是改变我的应用程序:
http://localhost:3000/users/546c2b15a340bb881f853fa6/teams/newTeam
进入这个:
http://localhost:3000/users/546c2b15a340bb881f853fa6/newTeam
然而,我应该弄清楚如何在URL中解析不同的参数。除此之外还有其他方法可以解决它吗?
我相信我的应用正试图采取" / newTeam"并在这种方法中转变为MongoDB _id,以及出现问题的地方:
app.param('team_id', function(req, res, next, team_id) {
var userTeam = TeamModel.getNewTeam(user_db);
userTeam.findById(team_id, function(err, team) {
if (err) {
return next(err);
}
if (!team) {
return new Error("no team matched");
}
req.team = team;
next();
});
});
答案 0 :(得分:1)
您可以按以下顺序创建这样的路线:
app.get("/users/:userId/teams/newTeam", routeHandler1);
app.get("/users/:userId/teams/:team_id", routeHandler2);
现在,只有当team_id不包含值" newTeam"时才会调用app.param("team_id", handler)
。