为什么我的快递 API 没有响应?
why is my express API not responding?
背景
我正在使用 NodeJs v7 和 cloud9 中的 express 测试一个简单的 Hello World 应用程序。
我正在努力让我的例子发挥作用,但我失败了。
问题
我所有的 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
您可以通过以下两种方式修复
var api = require("./api.js")();
app.use("/api/v1", require("./api.js"));
as API.js return 函数引用。所以你需要调用该函数来访问路由。
或者如果您不想更改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
中导出的函数并使用从该函数返回的路由器对象,所以您应该这样做:
你必须替换这一行:
app.use("/api/v1", require("./api.js"));
有了这个:
app.use("/api/v1", require("./api.js")());
背景
我正在使用 NodeJs v7 和 cloud9 中的 express 测试一个简单的 Hello World 应用程序。 我正在努力让我的例子发挥作用,但我失败了。
问题
我所有的 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
您可以通过以下两种方式修复
var api = require("./api.js")();
app.use("/api/v1", require("./api.js"));
as API.js return 函数引用。所以你需要调用该函数来访问路由。
或者如果您不想更改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
中导出的函数并使用从该函数返回的路由器对象,所以您应该这样做:
你必须替换这一行:
app.use("/api/v1", require("./api.js"));
有了这个:
app.use("/api/v1", require("./api.js")());