Node Express:将不同的参数传递给URL

时间:2014-11-21 05:08:49

标签: node.js express

我有一个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();
    });
});

1 个答案:

答案 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)