#node.js #backend #nestjs
Вопрос:
я столкнулся с проблемой с NestJS :
«[Гнездо] 5068 — 08/11/2021, 3:12:02 ОШИБКА PM [Обработчик исключений] Гнездо не может разрешить зависимости службы приложений (?). Пожалуйста, убедитесь, что аргумент UserRepository в индексе [0] доступен в контексте AppModule».
Я попытался добавить AppService в импорт, но безуспешно.
Как избежать этой ошибки?
приложение.модуль.ts :
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { User } from './user.entity';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'password',
database: 'test',
entities: [User],
synchronize: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
app.controller.ts :
import { Body, Controller, Get, Post } from '@nestjs/common';
import { AppService } from './app.service';
import * as bcrypt from 'bcrypt';
@Controller('api')
export class AppController {
constructor(private readonly appService: AppService) {
}
@Post('register')
async register(
@Body('name') name: string,
@Body('email') email: string,
@Body('password') password: string,
@Body('phone') phone: string,
) {
const hashedPassword = await bcrypt.hash(password, 12);
return this.appService.create({
name,
email,
password: hashedPassword,
phone,
})
}
}
приложение.сервис.ts :
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class AppService {
constructor(
@InjectRepository(User) private readonly userRepository: Repository<User>
) {
}
async create(data: any): Promise<User> {
return this.userRepository.save(data)
}
}
user.entry.ts :
import { Column, Entity, PrimaryColumn } from "typeorm";
@Entity('users')
export class User {
@PrimaryColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
@Column()
phone: string;
@Column()
password: string;
}
Спасибо
Ответ №1:
Вам нужно добавить TypeormModule.forFeature([User])
imports
в свой AppModule
, чтобы настроить @InjectRepository(User)
то, что вы используете. С модулем TypeORM, forRoot/Async
предназначен для подключения к базе данных и общей конфигурации TypeORM, forFeature
предназначен для динамической настройки поставщика