Json-server嘲笑API而不是调用



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

为了做到这一点,我选择Json服务器来做,下面是代码:

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,
static: 'static',
}),
router(db),
jsonServer.rewriter(routesJSON),
);
app.use('/api', 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本身并没有嘲笑使用数据库和给Json-server的路由对外部API的调用。

关于如何在运行时模拟API对外部API的调用,有什么想法吗?或者如何使json-server模拟调用httpService仅调用,而不是API本身

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

您可以通过寄存器给HttpModule一个配置。如果您想注入ConfigService以基于环境变量进行配置,请参阅异步配置,该环境变量决定您是否是本地的。config对象是Axios请求配置。然而,我看不到通过配置重定向请求的方法。

HttpModule使用axios,所以另一种选择是axios拦截器。在请求拦截器中,您只能让它在本地运行时覆盖config.url。要在应用程序开始时设置拦截器,可以创建一个注入HttpService的模块MyHttpModule,在onModuleInit中,获取对axios实例的引用并设置拦截器。看看我发现的这个例子。

相关内容

  • 没有找到相关文章

最新更新