Node.js 为什么我的express API没有响应? 背景

Node.js 为什么我的express API没有响应? 背景,node.js,mongodb,express,mean-stack,router,Node.js,Mongodb,Express,Mean Stack,Router,我正在cloud9中使用NodeJSV7和express测试一个简单的Hello World应用程序。 我试图让我的榜样起作用,但我失败了 问题 我所有的cloud9配置都很好,所以这不是问题所在。问题是我的应用程序。当我调试时,路由“api/v1/holabanaas”从未被调用,我不知道为什么 更糟糕的是,当我发出请求时,浏览器只是挂起,就像它在等待服务器永远不会给出的答复一样 代码 index.js具有初始化和启动代码。出于模块化的原因,我必须将它与api.js分开 index.js "u

我正在cloud9中使用NodeJSV7和express测试一个简单的Hello World应用程序。 我试图让我的榜样起作用,但我失败了

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

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

代码
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}!`);
"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.js
只包含路由和它们应该做什么

api.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}!`);
"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分开

  • 如何修复代码使其正常工作
注 我正在学习这门课程


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

var api = require("./api.js")();
app.use("/api/v1", require("./api.js"));
as 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;
解决方案 虽然Vikash Sharma的解决方案可行,但我还是按照Jayant Patil的建议并阅读了另一个问题:

事实证明,我们也遇到了同样的问题,但给出的答案也允许我将api文件完全封装在函数中,保留其作用域


不过,我还是很感谢你的努力

有一点很微妙:您必须调用在
api.js
中导出的函数,并使用从该函数返回的router对象,因此下面是您应该做的:

您必须替换此行:

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

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

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