所以我有以下路线:
app.delete('/project/:id', crud.deleteProject);
app.delete('/project/resource/', crud.removeResourceFromProject);
当我使用网址http://mysite.no/project/resource/
运行ajax调用时:
delete: function(url,data) {
return $.ajax({
url: url,
type: "DELETE",
dataType: 'json',
data: data
});
Express运行crud.deleteProject
功能。
如果我注释掉或将其移到另一条路线下方,它会按预期工作。
为什么会这样?
答案 0 :(得分:0)
在Express中,路由定义的顺序很重要。它将执行第一个匹配的路线。正如Blex所述,'/:id'
是一个通配符值,匹配'/resource'
而不是跳过并遵循正确的路由定义。
解决方案是将定义切换为在'/project/resource'
'/project/:id'
解决方案是添加另一个路径图层,例如 '/project/res/resource'
而不是'/project/resource'
,因为Express不会将其与'/:id'
匹配。