gpt4 book ai didi

javascript - 如何仅使用 Nest.js 框架中的依赖注入(inject)容器?

转载 作者:行者123 更新时间:2023-12-01 16:26:33 25 4
gpt4 key购买 nike

是否可以仅使用 Nest.js 框架中的 DI 和 IoC 功能?如果是,如何实现?

我试图以这种方式实现它:

import { NestFactory } from "@nestjs/core";
import { Module, Injectable } from "@nestjs/common";

@Injectable()
class AppRepository {
sayHi() {
console.log("app repository");
console.log("Hello");
}
}

@Injectable()
class AppService {
constructor(private appRepository: AppRepository) {}
sayHi() {
console.log("app service");
this.appRepository.sayHi();
}
}

@Module({
imports: [],
providers: [AppService, AppRepository]
})
class AppModule {
constructor(private appService: AppService) {}
sayHi() {
console.log("app module");
this.appService.sayHi();
}
}

async function bootstrap() {
const app = await NestFactory.createApplicationContext(AppModule);
const module = app.get<AppModule>(AppModule);
module.sayHi();
}

bootstrap();

但是当我运行代码时,我得到:
app module
(node:70976) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'sayHi' of undefined
at AppModule.sayHi (/Users/jakub/projects/nest-di-clean/build/main.js:47:25)
at /Users/jakub/projects/nest-di-clean/build/main.js:60:16
at Generator.next (<anonymous>)
at fulfilled (/Users/jakub/projects/nest-di-clean/build/main.js:11:58)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

所以我得到 AppModule 的实例,但是 AppService 的一个实例没有注入(inject)。

我想在我贡献的库中使用它,不需要 Controller 和其他服务器端的东西。

最佳答案

我找到了解决方案。我没有使用 nest-cli 创建新项目但刚刚使用 TypeScript 创建了一个空的 npm 项目并添加了 @nestjs/common@nestjs/core作为依赖项(我想最小化依赖项)。我的错误在 tsconfig.json我忘记允许的文件 emitDecoratorMetadata .这是我的package.jsontsconfig.json有兴趣的人可以存档:
package.json

{
"name": "nest-di-clean",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"compile": "yarn tsc",
"start": "node ./build/main.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"@nestjs/common": "^6.11.5",
"@nestjs/core": "^6.11.5",
"reflect-metadata": "^0.1.13",
"rxjs": "^6.5.4"
},
"devDependencies": {
"@types/node": "^13.7.0",
"typescript": "^3.7.5"
}
}
tsconfig.json
{
"compilerOptions": {
"target": "ES2015",
"module": "commonjs",
"outDir": "./build",
"strict": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"forceConsistentCasingInFileNames": true
}
}
main.js的内容文件都是我的问题。

关于javascript - 如何仅使用 Nest.js 框架中的依赖注入(inject)容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60016995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com