在我的 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
时,我会返回:
Cannot GET /login
但是,在我的 posts
路由器中,我的路线工作正常并在浏览器中正确加载:
router.get("/", (req, res) => {
service.getAllPosts(function(result) {
res.render("index", {
postList: result,
})
})
})
module.exports = router
有什么建议吗?这个错误是从哪里来的?
最佳答案
您的路线定义在很多方面都困惑了。
假设
users
是一个路由,您已多次注册同一个路由器。你永远不想那样做。这在路由器链中多次出现相同的路由器,这不是您想要的。路由器只能注册一次。您已为
/login
注册了一个路由器,然后在该路由器上为/login
注册了一条路由。这会为/login/login
创建一个路由处理程序。
要解决此问题,您需要更改路由器的注册方式以及其上的路由的定义方式。如果路由器上的所有路由都打算有一个公共(public)的顶级路径段,则仅应使用带有 app.use(path, router)
的路径。如果不是,则不要将 /
路径与 app.use()
一起使用以外的任何内容。
您没有显示足够的路由器定义来确定您的意图,但如果您只是尝试创建一个路由器而不是处理 /login
、/logout
和 /register
,那么你只需更改你的 app.use()
即可:
app.use("/login", users)
app.use("/logout", users)
app.use("/register", users)
对此:
app.use("/", users);
这将使您的用户路由器有机会查看所有顶级路径段。
而且,根据 posts
的内容,您可能还需要确保该行代码位于此行之前:
app.use("/", posts);
请注意,为同一路径级别的不同路由使用多个路由器有点不寻常。虽然它可以工作,但它通常不是最直观的设计方式。通常,您会将所有路由放在同一路由器上的子路径上,但不要将同一子路径上的多个路由拆分到不同的路由器上。请注意,您不必使用不同的路由器来将路由分布在不同的文件之间。
关于javascript - 文件未加载 - 无法获取/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46505666/