【问题标题】:why is my express API not responding?为什么我的 express API 没有响应?
【发布时间】:2017-03-30 20:19:47
【问题描述】:

背景

我正在使用 NodeJs v7 测试一个简单的 Hello World 应用程序并在 cloud9 中表达。 我正在尝试使我的示例工作,但我失败了。

问题

我所有的 cloud9 配置都很好,所以这不是问题。问题是我的应用程序。当我调试时,路由“api/v1/HolaBananas”永远不会被调用,我不知道为什么!

更糟糕的是,当我发出请求时,浏览器只是挂起,就像它在等待来自永远不会到来的服务器的答复!

代码

index.js 具有初始化和启动代码。出于模块化原因,我将其与api.js 分开对我来说很重要。

index.js

"use strict";

const express = require("express");

const app = express();
app.use("/api/v1", require("./api.js"));

app.listen(process.env.PORT);
console.log(`Server listening on port ${process.env.PORT}!`);

api.js 只包含路由和它们应该做什么。

api.js

"use strict";

const express = require("express");

module.exports = function() {

    const api = express.Router();       

    api.get("/HolaBananas", function(req, res){
        res.send("hello bananas!");
    });

    return api;
};

问题

我确定我没有以正确的方式使用api.get,但我真的想将我的初始化和启动代码与 api 分开。

  • 如何修复我的代码以使其正常工作?

注意

我正在学习课程

https://www.edx.org/course/introduction-mongodb-using-mean-stack-mongodbx-m101x-0

【问题讨论】:

  • 您是否尝试过将 api 代码保存在一个文件中并导出该模块,以便在您的主文件中添加该模块
  • 为什么不用express generator初始化项目呢?它将为您创建一个很好的目录结构。此外,默认情况下,您将获得一个路由文件夹。在任何这些路线中定义您的 api,您就可以开始了。
  • 尝试将 express 实例传递给 api.js 而不是再次要求它。此刻只是在黑暗中拍摄......

标签: node.js mongodb express mean-stack router


【解决方案1】:

您可以通过以下两种方式修复它

var api = require("./api.js")();
app.use("/api/v1", require("./api.js"));

作为 API.js 返回一个函数引用。所以你需要调用那个函数来访问路由。

或者如果你不想改变index.js,你需要修改你的api.js如下

"use strict";

const express = require("express");
const api = express.Router();       

    api.get("/HolaBananas", function(req, res){
        res.send("hello bananas!");
    });
module.exports = api;

【讨论】:

    【解决方案2】:

    解决方案

    虽然 Vikash Sharma 的解决方案可行,但我遵循 Jayant Patil 的建议并阅读了另一个问题:

    原来我们遇到了同样的问题,但该问题的给定答案还允许我将 api 文件完全封装在一个函数中,保留其范围。

    不过,感谢 ++ 的尝试!

    【讨论】:

      【解决方案3】:

      关于它有一件微妙的事情:您必须调用您在 api.js 中导出的函数并使用从该函数返回的路由器对象,所以您应该这样做:

      你必须替换这一行:

      app.use("/api/v1", require("./api.js"));
      

      用这个:

      app.use("/api/v1", require("./api.js")());
      

      【讨论】:

        猜你喜欢
        • 2021-11-08
        • 1970-01-01
        • 2019-04-12
        • 1970-01-01
        • 2018-04-01
        • 2013-08-10
        • 2015-12-30
        • 2014-04-28
        • 1970-01-01
        相关资源
        最近更新 更多