【问题标题】:How to use Express app's API routes as part of main application如何使用 Express 应用程序的 API 路由作为主应用程序的一部分
【发布时间】:2022-01-23 04:09:04
【问题描述】:

我有一个网站将使用 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]);
})

我想使用尽可能多的元方式从第一条路由向第二条路由发出请求。

【问题讨论】:

  • 通常,您没有自己的 http 服务器向自己发出请求。通常,您只需将其他 API 正在使用的功能分解到导出的函数中,然后直接调用该函数。这样肯定更有效,因为真的没有理由将它打包成一个 http 请求,通过网络堆栈,在你的服务器中将它解析为一个 http 请求,处理它,创建一个 http 响应,然后通过网络发送回来堆栈,解析响应,然后在您可以通过调用函数来避免这 8 个步骤中的 6 个时对其进行处理。
  • 如果您确实想发出自己的 http 请求,请获取像 got()axios() 这样的库,这样可以轻松完成。

标签: node.js express ejs


【解决方案1】:

通常,您没有自己的 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()axios() 这样的库来简化此操作。

【讨论】:

  • 我将 api 代码放入外部文件并加载到路由中。谢谢
【解决方案2】:

如果 /api/random 在另一个微服务中,那么您可以使用 Axios 进行 http 调用,但如果它在同一个 Express App 中,则重构代码并将其转换为函数并在两个控制器中调用该函数.

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 2020-08-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2018-08-01
    相关资源
    最近更新 更多