Nest.js perfecciona el modelo de desacoplamiento

¡Acostúmbrate a escribir juntos! Este es el tercer día de mi participación en el "Nuggets Daily New Plan · April Update Challenge" , haz clic para ver los detalles del evento .

El tercer paso hacia el full stack

modelo de datos modelo

El uso de mongoose del sitio web oficial se basa en la introducción modular y usamos nestjs-typegoosedependencias para implementar la introducción del módulo.

npm i nestjs-typegoose --save
复制代码

Modifique el main.tsarchivo , elimine la conexión de la base de datos en el archivo de entrada y cámbielo app.module.tsal método introducido en el módulo

async function bootstrap() {
    // mongoose.connect('mongodb://localhost/nestjs-test-api', {}, (err: any) => {
    //     if (err) {
    //         console.log(err, '数据库连接错误!');
    //     }
    //     console.log('数据库连接成功!');
    // });
...
}
bootstrap();
复制代码
// app.module.ts
import { TypegooseModule } from 'nestjs-typegoose';

@Module({
    imports: [
        TypegooseModule.forRoot('mongodb://localhost/nestjs-test-api', {}),
        PostsModule,
    ],
    controllers: [AppController],
    providers: [AppService],
})
export class AppModule { }
复制代码

Úselo para TypegooseModulevincular la base de datos y luego Postintroduzca el modelo Postde datos , puede inyectar el modelo en el controlador para su uso.

imagen.png

A partir de la relación simple en la figura anterior, podemos modificar aproximadamente el código correspondiente para realizar el modelo de inyección modular.

Modifique primero el archivo del modelopost.model.ts

import { prop } from '@typegoose/typegoose'; 
export class Post {
    @prop()
    title: string

    @prop()
    content: string
}

// export const PostModel = getModelForClass(Post);
复制代码

El modelo de datos se puede exportar directamente sin usar el paquete de exportación original. Luego introduzca el modelo de datos correspondiente en el posts.module.tsmódulo .

import { TypegooseModule } from 'nestjs-typegoose';
import { Post } from './post.model';

@Module({
    imports: [
        TypegooseModule.forFeature([Post]),
    ],
    controllers: [PostsController],
})
复制代码

Inyectar el modelo en el controlador.posts.controller.ts

import { ModelType } from '@typegoose/typegoose/lib/types';
import { InjectModel } from 'nestjs-typegoose';
import { Post as PostSchema } from './post.model';
export class PostsController {
    constructor(
        @InjectModel(PostSchema)
        private readonly postModel: ModelType<PostSchema>
    ) { }
    ...
}
复制代码

Después de usar el @InjectModeldecorador , this.postModelse puede acceder al modelo a través de la interfaz.

@Controller('posts')
@ApiTags('Posts')
export class PostsController {
    constructor(
        @InjectModel(PostSchema)
        private readonly postModel: ModelType<PostSchema>
    ) { }
    @Get()
    @ApiOperation({
        summary: '获取文章列表数据',
    })
    async index() {
        return await this.postModel.find();
    }

    ...
}
复制代码

De esta forma, el modelo se desacopla y se puede inyectar y utilizar en cualquier módulo.

generador CRUD

Nest CLIGenere automáticamente los archivos de código requeridos por el módulo. Haz que nuestro desarrollo sea fácil y eficiente.

nest g resource
复制代码
  • cmdresultado de ejecución

imagen.png

  • Ejecute el archivo de plantilla generado

imagen.png

Después de ejecutar el comando en el directorio raíz del proyecto, se pueden generar todos los archivos de Nestcompilación , incluidos módulos, servicios, controladores y clases de entidad, DTOtambién se generan clases y archivos de prueba. Solo importa la definición del modelo para implementar el negocio.

Resumir

到此,对于 `Nest` 我们熟悉了基本的使用规则,后续接着实现如何在项目内管理多个子项目。
复制代码

Supongo que te gusta

Origin juejin.im/post/7085559044949147685
Recomendado
Clasificación