Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js express.js路由代码定位是否重要?_Node.js_Express - Fatal编程技术网

Node.js express.js路由代码定位是否重要?

Node.js express.js路由代码定位是否重要?,node.js,express,Node.js,Express,定位路线代码是否重要 我询问的原因是,当我定位res.render(“新”)代码时 朝页面下方,路由无效。如果我把它放得更高,它会相应地移动。例如 router.get("/tag/:id", controller.showBlog); router.get("/:id/edit", controller.editBlog); router.get("/new", function (req, res) { res.render("new")}); 上面的代码。。无法路由到新的.ej

定位路线代码是否重要

我询问的原因是,当我定位res.render(“新”)代码时 朝页面下方,路由无效。如果我把它放得更高,它会相应地移动。例如

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

router.get("/new", function (req, res) {    
res.render("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”)路由导致的 导致在到达(“/new”)之前调用(“/:id”)。 换句话说,定位路线很重要

我还运行了set DEBUG=express:&node app.js

这是工作预期结果的日志

这是我的路由代码放置错误的日志

一个行项目显示了一些不正确的地方


您应该在匿名函数中包装
showBlog
editBog
。另外,我不确定语法是
controller.showBlog
还是
controller.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")});

这些是应用程序中唯一的路由吗?对于您描述的路线,这不重要。但请考虑以下内容:

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
处理程序。

仅使用该代码进行调试是很困难的,但您可能会幸运地使用express的调试模式来查看发生奇怪行为的确切原因:

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

DEBUG=express:*node index.js


你完全正确。。。我在上面有一个get('/:id'),在进入实际get('/new')之前先捕获/new。换句话说,路线的定位很重要。谢谢分享。显然,问题确实是由于路线的定位。无论如何,您共享的调试express非常有用。谢谢