我在应用程序中有两条路径:
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')
会触发。
知道为什么吗?我想也许是因为单词thing
是thingId
的子字符串,可能会匹配。
答案 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();
});
});