微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Json 服务器模拟 API 而不是调用

如何解决Json 服务器模拟 API 而不是调用

我正在使用 nestJS (NodeJS) 制作 API,为了在本地环境中运行它而不运行所有外部 API,我想在我的 API 运行时模拟对外部 API 的调用

为了做到这一点,我选择了Json-server来做,代码如下:

mockserver.ts:

export async function bootstrap() {
  const app = create();
  app.use(
    defaults({
      logger: true,static: 'static',}),router(dbJSON),jsonServer.rewriter(routesJSON),);

  app.use('/api',router);
}

我也试过:

export async function bootstrap() {
  const app = create();
  app.use(
    defaults({
      logger: true,router(db),router);
  const port = process.env.mockPort ?? 8080;
  app.listen(port);

main.ts :

async function bootstrap() {
  const app = await nestFactory.create(AppModule)

  const mocks = await import('../mocks/server');
  app.use(await mocks.bootstrap(null));

  await app.listen(DEFAULT_HTTP_PORT,DEFAULT_HOST);
}

然而,我的 API 本身被模拟了,而不是使用 db 和提供给 Json-server 的路由来模拟对外部 API 的调用

关于如何在运行时模拟对外部 API 的 API 调用的任何想法?或者如何让 json-server 模拟调用 httpService 调用而不是 API 本身

解决方法

我以前没有尝试过,但我认为您要么需要配置现有的 HttpModule 以有时转发调用,要么用一个新模块包装 HttpModule,该模块决定是否将请求转发到真实服务器或模拟服务器。

您可以通过 registerHttpModule 一个配置。如果您想注入 ConfigService 以根据确定您是否为本地的环境变量对其进行配置,请参阅异步配置。配置对象是一个 Axios request config。但是,我没有看到通过配置重定向请求的方法。

HttpModule 使用 axios,所以另一个选项是 axios interceptors。在请求拦截器中,您可以让它仅在本地运行时覆盖 config.url。要在应用程序的开头设置拦截器,您可以创建一个注入 MyHttpModule 的模块 HttpService,并在 onModuleInit 中获取对 axios 实例的引用并设置拦截器。查看我找到的 this example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?