跳转至

HTTP adapter

有时,您可能希望访问底层 HTTP 服务器,可以在 Nest 应用程序上下文中访问,也可以从外部访问。

每个本地(特定于平台的)HTTP 服务器/库(例如 Express 和 fasttify)实例都包装在一个 适配器 中。 适配器被注册为一个全局可用的提供器,可以从应用程序上下文中检索它,也可以注入到其他提供器中。

外部应用程序上下文策略

要从应用程序上下文外部获取对HttpAdapter的引用,请调用getHttpAdapter()方法。

const app = await NestFactory.create(AppModule);
const httpAdapter = app.getHttpAdapter();

语境策略

要从应用程序上下文中获取对HttpAdapterHost的引用,使用与任何其他现有提供器相同的技术(例如,使用构造函数注入)注入它。

1
2
3
export class CatsService {
  constructor(private adapterHost: HttpAdapterHost) {}
}
1
2
3
4
5
6
@Dependencies(HttpAdapterHost)
export class CatsService {
  constructor(adapterHost) {
    this.adapterHost = adapterHost;
  }
}

Hint

The HttpAdapterHost is imported from the @nestjs/core package.

HttpAdapterHost不是一个实际的HttpAdapter。 要获得实际的HttpAdapter实例,只需访问HttpAdapter属性。

const adapterHost = app.get(HttpAdapterHost);
const httpAdapter = adapterHost.httpAdapter;

httpAdapter是底层框架使用的 HTTP 适配器的实际实例。 它是ExpressAdapterFastifyAdapter的一个实例(两个类都扩展了AbstractHttpAdapter)。

适配器对象公开了几个与 HTTP 服务器交互的有用方法。 但是,如果你想直接访问库实例(例如 Express 实例),可以调用getInstance()方法。

const instance = httpAdapter.getInstance();