【问题标题】:Simple test route is not responding to simple Postman request简单的测试路线没有响应简单的 Postman 请求
【发布时间】:2020-05-14 04:58:35
【问题描述】:

我尝试创建最简单的测试路由来在我的本地主机上进行测试,如下所示。

已验证 localhost:3000 已启动。写了一个简单的测试文件。

const express = require('express');
const router = express.Router();

router.route('/test').get((req, res) => {
  console.log('route found');
});

module.exports = router;

我的路由在路由目录中的索引路由文件中被拆分如下。

module.exports.api = require('./api');
module.exports.auth = require('./auth');
module.exports.root = require('./root');
module.exports.articles = require('./articles');
module.exports.test = require('./test');

我在服务器的 index.js 中使用如下路由:

const routes = require(__dirname + '/routes');
app.use('/test', routes.test);

使用 Postman 对其进行了测试。

localhost:3000/test/test发送请求。

没有回应。如何进一步排除故障?

【问题讨论】:

    标签: express routes postman


    【解决方案1】:

    您没有收到任何响应,因为您没有从服务器发送任何响应。您需要发回一些响应,否则客户端将一直等待响应,直到请求超时。

    router.route('/test').get((req, res) => {
      res.send('route not found');
    });
    

    编辑

    app.use('/test', routes.test); 不适用于您定义路线的方式。要让它工作,请求 url 应该是/test/test。如果您希望请求 url 只是 /test,请更改

    app.use('/test', routes.test);
    

    app.use(routes.test);
    

    【讨论】:

    • 但我还是应该在我的本地主机中看到 console.log 吗?
    • 谢谢,但即使添加了 res.send 命令,Postman 仍然会挂在那里。
    • @j.a 是的,您应该在控制台上看到一个 console.log。确保您的服务器正在运行
    【解决方案2】:

    这是你想要做的工作版本

    const express = require('express');
    const router = express.Router();
    
    router.get('/test', (req, res) => {
        res.send("hey");
        console.log('route found');
    });
    
    module.exports = router;
    

    现在在您的主模块中,您需要检查您是否正在侦听正确的端口,并且您的 express 应用实际上正在使用导出的路由器!

    const express = require('express');
    const app = express();
    const router = require('path/to/router/module');
    
    app.use(router)
    app.listen(8080, () => console.log("listening to port 8080"));
    

    编辑:

    你提到了

    我的路由在路由目录中的索引路由文件中被拆分如下。

    而且,我可以看到在主模块中,您需要的是目录本身,而不是路由模块

    const routes = require(__dirname + '/routes');
    

    而你应该需要的是一个模块而不是一个目录!

    const routes = require(__dirname + '/routes/yourRouteModuleName');
    

    我刚才给出的解决方案假设了以下项目的结构:

    ├── index.js
    ├── routes
    │   ├── test.js
    │   ├── routeModuleOrWhatever.js
    │   
    

    【讨论】:

    • 验证 localhost 正在运行并且路由已设置。我更新了我的问题以显示 app.use 命令。
    • 顺便说一句,我正在使用 3000 端口作为 localhost。
    • 我的语法有点不同。但是我确实将子路由更改为 test1,因此超级路由和子路由之间没有混淆。
    • 对不起,我不知道要发布什么代码,所以我没有发布足够的代码。我更新了我的 Q 以包含所有代码,但我有一个名为 routes 的文件夹,其中包含每组路由的文件。然后一个索引文件整合了这些路由文件,这样我就可以使用一个 require 命令来访问它们。现在应该发布所有相关代码。
    猜你喜欢
    • 2021-02-28
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多