如何在 Nest.js 之外手动获取提供程序的实例

问题描述 投票:0回答:3

我有一个 Express.js 应用程序,正在迁移到 Nest.js,一些应用程序模块正在使用 Nest.js,有些则没有。

假设我有一个 OrderModule,它是一个 Nest.js 模块,并且它的提供程序中有一个 OrderService,我想在不是 NestJS 模块的产品模块中使用 OrderService。 是否可以在不将产品模块转换为 NestJS 模块的情况下获取 OrderService 的实例?

javascript node.js express nestjs
3个回答
3
投票

从应用程序外部访问 Nest DI 容器的唯一方法是导出由

app
创建的
NestFactory.create()
实例,然后调用
app.get(OrderService)
检索服务。


0
投票

与上述答案之一相同,但带有代码。我自己测试了一下,确实有效

// nextjs/src/action.ts
"use server";

import { NestFactory } from "@nestjs/core";
import { AppModule } from "@api/app.module";
import { AppService } from "@api/app.service";


export async function getHelloAction() {
    const app = await NestFactory.create(AppModule);
    const appService = app.get(AppService);
    const result = appService.getHello();
    await app.close();
    return result;
}
// nestjs/src/app.service.ts
import { Injectable, Logger } from '@nestjs/common';

@Injectable()
export class AppService {
  constructor(private readonly logger: Logger) {}

  getHello(): string {
    const message = 'Hello World!';
    this.logger.log(message);
    return message;
  }
}

// nestjs/src/app.module.ts
import { Module, Logger } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService, Logger],
})
export class AppModule {}


-2
投票

这只是包含'apn'模块的示例(不是nestjs原生的)

import { Injectable } from '@nestjs/common';
import { UserGateway } from '../../users/gateways/user.gateway';

@Injectable()
export class NotificationsGateway {
    private user: UserGateway;
    private appleapn = require('apn');
...
© www.soinside.com 2019 - 2024. All rights reserved.