【问题标题】:Express routing does not work with simple test case快速路由不适用于简单的测试用例
【发布时间】:2020-05-14 18:44:26
【问题描述】:

我认为我缺少 Express 基本路由的一些概念。见here

我在我的服务器index.js 文件中创建了一些简单的测试代码,如下所示。

app.get('/foo', function (req, res) {
  console.log('foo path found');
  res.send('foo achieved')
})

在我的浏览器(chrome)中输入网址

localhost:3000/foo

触发路由,但服务器或客户端没有响应。

我已验证 localhost:3000 已启动并正在运行。

端口在不同的文件中设置如下:

app.set('port', (process.env.PORT || 3000));

但我也在终端中得到如下确认:

const server = app.listen(app.get('port'), () => {
  console.log('DEBUG: express: server up');
});

我在一个阻塞了一些流量的校园网络上,但是 b.c.这是本地主机,我认为这无关紧要。

【问题讨论】:

    标签: javascript express routes


    【解决方案1】:

    我认为您没有提供足够的信息来正确调试您的问题。

    我最初会确保 Express 正在侦听端口 3000,请仔细检查这一行:

    app.listen(3000);
    

    理想情况下,这一行应该在脚本的底部。

    对编辑的回应:是的,这无关紧要。 localhost 是系统本身的别名。是一个loopback,类似于127.0.0.1

    【讨论】:

    • 我可以在浏览器中输入localhost:3000,然后我的网络应用就会出现。我就是这样验证的。
    • 我也在终端中得到确认,并将该代码添加到 Q 中。
    • app.get('port') 更改为3000 为整数并重新运行。 app.get 不是为了这个目的。
    • 看起来确实很奇怪。然而,使用 getter 和 setter 是 API 的一部分...expressjs.com/en/api.html#app.set
    • 我更新了 Q 以包含端口的设置。
    【解决方案2】:

    您似乎已经创建了两个 express 应用程序,正如您所提到的,您正在使用两个不同的文件,您能够运行的 localhost 是具有 app.listen() 代码的那个,但这没有app.get()

    我建议你现在使用单个文件并尝试这样做。

    试试下面的代码,现在用localhost:3000/foo检查一下。

    const express = require('express')
    const app = express()
    const port = 3000
    
    app.get('/foo', function (req, res) {
      console.log('foo path found');
      res.send('foo achieved')
    })
    
    app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))
    

    【讨论】:

    • 好主意。我有一个复杂的应用程序,我已将其分解为较小的部分以进行故障排除。稍后我将创建一个新的单个文件“应用程序”进行测试,并让您知道结果。
    • 是的,当然。如果你想分解它,那么你必须在其他文件中使用相同的 app 实例,你可以通过将它导出到另一个文件来做到这一点。不要多次执行 app = express()。
    • 经过更多测试,由于某种原因,我的中间件破坏了我的路线。奇怪的行为。我注释掉了几行代码,直到路线开始工作。完全试错是没有意义的。
    猜你喜欢
    • 2018-11-19
    • 2022-01-24
    • 2015-04-01
    • 2015-11-11
    • 2013-03-11
    • 1970-01-01
    • 2018-01-11
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多