如何使用 Express 应用程序的 API 路由作为主应用程序的一部分
How to use Express app's API routes as part of main application
我有一个网站将使用 EJS 模板来显示我的数据库中的数据。我不想为此创建第二个 API,而是想使用其他开发人员可以使用的预先存在的 API。有没有办法以最元的方式从我的 API 获取数据。
主要应用程序路线
app.get("/facts/random", async (req, res) => {
/* Make request to /api/random here and get JSON data */
});
API路线
app.get("/api/random/", async (req, res) => {
let results = await Fact.find();
const randomResult = Math.floor(Math.random() * results.length);
return res.json(results[randomResult]);
})
我想使用尽可能元的方式从第一条路由到第二条路由发出请求。
如果/api/random在另一个微服务中那么你可以使用Axios进行http调用,但如果它在同一个Express App中那么重构代码并将其变成一个函数并在两个控制器。
通常,您没有自己的http 服务器向自己发出请求。通常,您只需将另一个 API 正在使用的功能提取到导出函数中,然后直接调用该函数。
这样肯定更有效,因为真的没有理由将它打包成一个 http 请求,通过网络堆栈,在你的服务器中将它解析为一个 http 请求,处理它,创建一个 http 响应,发送通过网络堆栈返回,解析响应,然后在您可以通过调用您分解出的通用函数来避免这 8 个步骤中的 6 个时处理它。
app.get("/facts/random", async (req, res) => {
let randomResult = await apiRandom();
...
});
async function apiRandom() {
let results = await Fact.find();
const randomResult = Math.floor(Math.random() * results.length);
return results[randomResult];
}
app.get("/api/random/", async (req, res) => {
let randomResult = await apiRandom();
res.json(randomResult);
});
如果出于某种原因,您确实想向自己的 HTTP 服务器发出请求,那么获取一个像 got() or axios() 这样的库可以让这一切变得简单。
我有一个网站将使用 EJS 模板来显示我的数据库中的数据。我不想为此创建第二个 API,而是想使用其他开发人员可以使用的预先存在的 API。有没有办法以最元的方式从我的 API 获取数据。
主要应用程序路线
app.get("/facts/random", async (req, res) => {
/* Make request to /api/random here and get JSON data */
});
API路线
app.get("/api/random/", async (req, res) => {
let results = await Fact.find();
const randomResult = Math.floor(Math.random() * results.length);
return res.json(results[randomResult]);
})
我想使用尽可能元的方式从第一条路由到第二条路由发出请求。
如果/api/random在另一个微服务中那么你可以使用Axios进行http调用,但如果它在同一个Express App中那么重构代码并将其变成一个函数并在两个控制器。
通常,您没有自己的http 服务器向自己发出请求。通常,您只需将另一个 API 正在使用的功能提取到导出函数中,然后直接调用该函数。
这样肯定更有效,因为真的没有理由将它打包成一个 http 请求,通过网络堆栈,在你的服务器中将它解析为一个 http 请求,处理它,创建一个 http 响应,发送通过网络堆栈返回,解析响应,然后在您可以通过调用您分解出的通用函数来避免这 8 个步骤中的 6 个时处理它。
app.get("/facts/random", async (req, res) => {
let randomResult = await apiRandom();
...
});
async function apiRandom() {
let results = await Fact.find();
const randomResult = Math.floor(Math.random() * results.length);
return results[randomResult];
}
app.get("/api/random/", async (req, res) => {
let randomResult = await apiRandom();
res.json(randomResult);
});
如果出于某种原因,您确实想向自己的 HTTP 服务器发出请求,那么获取一个像 got() or axios() 这样的库可以让这一切变得简单。