在我的users
路由文件中,我正在解析以下路由:
router.get("/login", (req, res) => {
res.render('login')
})
module.exports = router
在我的app.js
文件中,我正在加载以下路由:
app.use("/", posts)
app.use("/new", posts)
app.use("/login", users)
app.use("/logout", users)
app.use("/register", users)
当我打开http://localhost:8080/login
时,我回来了:
无法GET /登录
但是,在我的posts
路由器中,我的路由工作正常并在浏览器中正确加载:
router.get("/", (req, res) => {
service.getAllPosts(function(result) {
res.render("index", {
postList: result,
})
})
})
module.exports = router
出现此错误的任何建议?
答案 0 :(得分:1)
您的路线定义会以多种方式搞砸。
假设users
是一条路线,您已多次注册同一台路由器。你永远不想那样做。这在路由器链中有多次相同的路由器,这不是你想要的。路由器只能注册一次。
您已为/login
注册了路由器,然后在该路由器上为/login
注册了路由。这为/login/login
创建了一个路由处理程序。
要解决此问题,您需要更改路由器的注册方式,以及如何定义路由器的路由。如果路由器上的所有路由都打算使用公共顶级路径段,则只应使用app.use(path, router)
的路径。如果没有,则不要使用除/
以外的app.use()
路径以外的任何其他内容。
您没有显示足够的路由器定义来确定您的意图,但是如果您只是尝试创建路由器而不是句柄/login
,/logout
和{{1} },然后你可以改变你的/register
:
app.use()
到此:
app.use("/login", users)
app.use("/logout", users)
app.use("/register", users)
这将为您的用户路由器提供查看所有顶级路径段的机会。
而且,根据app.use("/", users);
的内容,您可能还需要确保代码行在此之前:
posts
注意,在同一路径级别使用多个路由器用于不同路由有点不寻常。虽然它可以工作,但它通常不是最直观的设计方式。通常,您将所有路由放在同一路由器上的子路径上,但不会在不同路由器的同一子路径上拆分多条路由。请注意,您不必使用不同的路由器只是为了在不同的文件中传播您的路由。