gpt4 book ai didi

javascript - NestJS - 注入(inject)的服务在构造函数中未定义

转载 作者:行者123 更新时间:2023-11-30 07:12:33 24 4
gpt4 key购买 nike

根据 the documentation ,我在 Controller 的构造函数中注入(inject)了一个服务,但结果显示为 undefined

processScraped.controller.ts

import { Controller, Post, Body } from '@nestjs/common';
import { ProcessScrapedService } from "./processScraped.service"

console.log(`\nController - ProcessScrapedService = `, ProcessScrapedService) // logs : class ProcessScrapedService { ......

@Controller('processScraped')
export class ProcessScrapedController {

constructor(private readonly pss: ProcessScrapedService) {
console.log(`constructor - pss = `, pss) // logs : undefined (Should not !)
console.log(`constructor - this.pss = `, this.pss) // logs : undefined (Should not !)
}

@Post()
async processScraped(@Body() body) {
console.log(`processScraped - this.pss = `,this.pss) // logs : undefined (Should not !)
return this.pss.processScraped(body) // TypeError: Cannot read property 'processScraped' of undefined
}
}

所以:

  • 服务存在

  • 导入后作为服务正确导入和记录

  • 当我将它注入(inject)我的 Controller 时,它是未定义的。

也许问题出在服务定义上?

processScraped.service.ts

import { Component } from '@nestjs/common';

@Component()
export class ProcessScrapedService {
async processScraped(body) {
// Some logic here
return
}
}

...或者可能在模块中?

processScraped.module.ts

import { Module } from '@nestjs/common';

import { ProcessScrapedController } from './processScraped.controller';
import { ProcessScrapedService } from './processScraped.service';

console.log(`\Module - nProcessScrapedService = `, ProcessScrapedService) // logs : class ProcessScrapedService { ......

@Module({
controllers: [ProcessScrapedController],
components: [ProcessScrapedService],
})
export class ProcessScrapedModule { }

我真的看不出我做错了什么??

编辑 - 这是我的依赖项:

"dependencies": {
"@nestjs/common": "^4.5.9",
"@nestjs/core": "^4.5.10",
"@nestjs/microservices": "^4.5.8",
"@nestjs/mongoose": "^3.0.1",
"@nestjs/testing": "^4.5.5",
"@nestjs/websockets": "^4.5.8",
"@types/mongoose": "^5.0.9",
"bluebird": "^3.5.1",
"dotenv": "^5.0.1",
"elasticsearch": "^14.2.2",
"express": "^4.16.3",
"mongoose": "^5.0.16",
"mongoose-elasticsearch-xp": "^5.4.1",
"reflect-metadata": "^0.1.12",
"rxjs": "^5.5.6",
"shortid": "^2.2.8"
},
"devDependencies": {
"@types/node": "^8.0.0"
}

和我的 tsconfig.json :

{
"compilerOptions": {
"target": "ES2017",
"module": "commonjs",
"lib": [
"dom",
"es2017"
],
"outDir": "../../dist/server",
"removeComments": true,
"strict": true,
"noImplicitAny": false,
"typeRoots": [
"node_modules/@types"
],
"types": [
"node"
],
"experimentalDecorators": true
}
}

最佳答案

您的 tsconfig.json 文件中缺少 "emitDecoratorMetadata": true

关于javascript - NestJS - 注入(inject)的服务在构造函数中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111330/

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