当param不在路由URL中时,ExpressJS .param(' term',...)会触发

时间:2015-03-02 22:18:18

标签: node.js express router

我在应用程序中有两条路径:

  • app.post('/thing/add', thing.addHandler);
  • app.post('/thing/:thingId/edit', thing.editHandler);

(按所列顺序)

编辑处理程序有一个:thingId参数,我使用以下内容查找并填充(例如,简化):

app.param('thingId', function ( req, res, next, id ) {

  Thing.findById(id, function ( err, foundThing ) {

    ...
    req.thing = foundThing;
    next();
  });
});

当我发布到任一路线时,.param('thingId')会触发。

知道为什么吗?我想也许是因为单词thingthingId的子字符串,可能会匹配。

3 个答案:

答案 0 :(得分:0)

如果我使用正则表达式:

app.param(/^thingId$/, function ( req, res, next, id ) {..}

它按照我的意图运作。

答案 1 :(得分:0)

Express会将您的帖子发送到/thing/add,并认为thingId现在的值为'add'。它不知道thingId应该是一个整数值。

要解决此问题,请弄清楚如何使路线明确区别。

答案 2 :(得分:0)

Recomend使用PUT方法更新或修改文档。

我认为你需要这样的东西,兄弟:

app.post('/thing', function(req,res,next){
    new Thing();
    return next();
});

app.put('/thing/:id', function(req,res,next){
    var thingId = req.params.id
     Thing.findById(id, function ( err, foundThing ) {
        req.thing = foundThing;
        next();
    });
});