express.js路由代码定位,有关系吗?

时间:2018-12-02 13:30:39

标签: node.js express

确定路线代码的位置重要吗?

我问的原因是因为当我放置res.render(“ new”)代码时 朝页面下方移动时,路由无效。如果我将其放在顶部,它会相应地路由。例如

router.get("/tag/:id", controller.showBlog);
router.get("/:id/edit", controller.editBlog);

router.get("/new", function (req, res) {    
res.render("new")});

上面的代码。无法路由到new.ejs ...没有错误,将我推回索引。

router.get("/new", function (req, res) {
res.render("new")});

router.get("/tag/:id", controller.showBlog);
router.get("/:id/edit", controller.editBlog);

上面的代码。能够路由到new.ejs

更新已解决。

尽管显示的示例代码与上面的代码不完全相同, 确实是由于在get(“ / new”)上方有一条get(“ /:id”)路线, 导致(“ /:id”)在到达(“ / new”)之前被调用。 换句话说,确定路线的位置很重要。

我还运行了DEBUG = express:*和node app.js

这是达到预期效果的日志。

Correct Route

这里是我的路由代码放置不正确的日志。

显示不正确的订单项。

Incorrect Route

3 个答案:

答案 0 :(得分:2)

这些是您应用程序中唯一的路由吗?对于您所描述的路线,没关系。但是请考虑以下几点:

app.get('/:id', function (req, res) {
  // this will match all /a, /b .. including /new
  res.end('done!');
});

app.get('/new', function (req, res) {
  // this is never called
  res.end('done!!');
});

在上述情况下,将永远不会调用/new处理程序。

答案 1 :(得分:1)

仅使用该代码很难调试,但是使用express的调试模式可能会很幸运,以确切了解发生这种奇怪行为的原因:

使用以下方式启动应用程序:

Promise

https://expressjs.com/en/guide/debugging.html

答案 2 :(得分:0)

您应将showBlogeditBog包装在匿名函数中。另外我不确定语法controller.showBlogcontroller.showBlog()

具有匿名功能:

router.get("/tag/:id", (req,res)=>{controller.showBlog()});
router.get("/:id/edit",(req,res)=>{controller.editBlog()});

router.get("/new", function (req, res) {    
res.render("new")});