为什么我的快递API不响应?

背景

我正在使用NodeJs v7testing一个简单的Hello World应用程序,并在cloud9中进行expression。 我试图让我的例子工作,但我失败了。

问题

我所有的cloud9configuration都很好,所以这不是问题。 问题是我的应用程序。 当我debugging,路线“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

你可以通过以下两种方式解决它

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

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

或者你需要修改你的api.js,如果你不想改变index.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夏尔马的解决scheme将工作,我通过遵循Jayant Patil的build议,并解读这个问题:

原来我们有同样的问题,但是这个问题给出的答案也允许我把api文件完全封装在一个函数中,保留它的范围。

尽pipe如此,尝试!

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

你必须更换这一行:

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

有了这个:

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