¡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-typegoose
dependencias para implementar la introducción del módulo.
npm i nestjs-typegoose --save
复制代码
Modifique el main.ts
archivo , elimine la conexión de la base de datos en el archivo de entrada y cámbielo app.module.ts
al 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 TypegooseModule
vincular la base de datos y luego Post
introduzca el modelo Post
de datos , puede inyectar el modelo en el controlador para su uso.
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.ts
mó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 @InjectModel
decorador , this.postModel
se 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 CLI
Genere automáticamente los archivos de código requeridos por el módulo. Haz que nuestro desarrollo sea fácil y eficiente.
nest g resource
复制代码
cmd
resultado de ejecución
-
Ejecute el archivo de plantilla generado
Después de ejecutar el comando en el directorio raíz del proyecto, se pueden generar todos los archivos de Nest
compilación , incluidos módulos, servicios, controladores y clases de entidad, DTO
también se generan clases y archivos de prueba. Solo importa la definición del modelo para implementar el negocio.
Resumir
到此,对于 `Nest` 我们熟悉了基本的使用规则,后续接着实现如何在项目内管理多个子项目。
复制代码