javascript - 文件未加载 - 无法获取/

标签 javascript node.js

在我的 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

有什么建议吗?这个错误是从哪里来的?

最佳答案

您的路线定义在很多方面都困惑了。

  1. 假设 users 是一个路由,您已多次注册同一个路由器。你永远不想那样做。这在路由器链中多次出现相同的路由器,这不是您想要的。路由器只能注册一次。

  2. 您已为 /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/

相关文章:

Javascript JSON.stringify 返回 []

node.js - Grunt 压缩 : How could I only include runtime node module dependencies?

node.js - 使用 Jest 模拟 namespace 和具有相同名称的函数

javascript - Node.js 中的包和模块有什么区别

javascript - 是否存在使用 Jitsi Videobridge(没有 lib-jitsi-meet)的示例代码?

javascript - 如何防止添加重复的arraylist对象值?

javascript - 解析: count of objects with pointer to another type object with given ID

javascript - 远程调试 Chrome for iOS

node.js - node.js 可以在任何托管服务提供商中运行吗?

javascript - 与其他 js 文件共享 MongoDB 连接