确定路线代码的位置重要吗?
我问的原因是因为当我放置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
这是达到预期效果的日志。
这里是我的路由代码放置不正确的日志。
显示不正确的订单项。
答案 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
答案 2 :(得分:0)
您应将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")});