2015-12-16 118 views
-2

我正在重新说明这一点,因为我已经找出问题所在,但我无法理解它是如何发生或如何解决它的。NodeJs Express路由器错误

基本上,在我所有的路线中,我必须在那里添加DELETE路线。首先是如下

app.route('/bi/clubs/:id') 
    .post(authentication,clubController.getAll) 
    .delete(authentication,clubController.deleteClub); 

第二个位置是

app.route('/bi/clubs/members') 
    .post(authentication,memController.getAll) 
    .delete(authentication,memController.deleteMember); 

每当我打电话删除了“/ BI /俱乐部/成员”,表达的是实际的路由到/ BI /俱乐部/ :ID'。我实际上已经经历了,并且发现这种情况正在发生。

我可以验证我没有在应用程序的任何其他位置添加路线,如果我注释掉'/ bi/clubs/id'上的DELETE路线,那么第二条DELETE路线将正确路由。如果我不发表评论,则对DELETE'/ bi/clubs/members'的呼叫将路由到'/ bi/clubs /:id'。

我设置路线的顺序就像上面一样。

任何帮助将不胜感激。

+0

那么服务器抛出的实际错误是什么?你没有提供很多细节...... – robertklep

+0

这就是问题所在。我甚至没有收到我的日志文件或任何错误。我正在测试邮差,只是得到内部服务器错误。有趣的是,如果我将删除方法的路由更改为其他任何内容,那么它将起作用。 –

+0

您确实需要提供更多信息(什么是'authentication'?getAll'工作吗?您是否在[调试模式](http://expressjs.com/en/guide/debugging.html)中运行了Express?)。 – robertklep

回答

1

快递与您的路由/bi/clubs/members/bi/clubs/:id。当向Express应用程序发出请求时,您的应用程序将从您的路线和中间件的顶部开始,一直到达匹配的所有路线。

当你告诉快递相匹配的路线/bi/clubs/:id,所有你告诉它匹配bi,然后clubs然后,你指的是作为id的动态值。尽管您可能在寻找id作为数字或MongoDB ID,但Express并不知道其差异,因此在技术上,字符串members与动态值相匹配。只是不是你想要的。

如果你console.log的值为id它应该是members。你的静态路由需要在动态路由之前注册。

如果您有任何问题或需要示例,请告诉我。

+0

Max,非常感谢。但我仍然不确定如何在不改变路径的情况下解决此问题。你能举个例子吗?或者让我知道你是否需要我的代码的更多信息。我正在使用MEANJS结构,并且它不知道按顺序添加我的所有路由,并且我将这两条路由放在不同的文件中。 –

+0

@John你怎么打这些路线文件?我假设用''require()'''。你只需确保你在哪里调用或加载你的文件,那么带''/ bi/clubs/members'''的文件就会首先出现。如果这没有意义,请让我知道,我会提供一个明确的例子。 –

+0

你可以使用正则表达式来测试@Johns理论。 – AfDev