Cómo Configurar un Proyecto NestJS + MySQL + TypeScript
- 604Palabras
- 3Minutos
- 05 Jul, 2024
Este artículo explica detalladamente cómo configurar un proyecto NestJS + MySQL + TypeScript desde cero, ayudando a los desarrolladores a comenzar rápidamente y construir sus propios proyectos.
Inicialización del Proyecto
Primero, necesitamos instalar globalmente Nest CLI:
1npm install -g @nestjs/cli
Luego, utilizamos Nest CLI para crear un nuevo proyecto:
1nest new my-nestjs-project
Elige npm o yarn como la herramienta de gestión de paquetes y sigue las indicaciones para completar la inicialización del proyecto.
Instalación de Dependencias Necesarias
A continuación, entra en el directorio del proyecto e instala las dependencias necesarias:
1cd my-nestjs-project2npm install --save @nestjs/typeorm typeorm mysql23npm install --save-dev @types/mysql2
Aquí instalamos los paquetes @nestjs/typeorm
, typeorm
y mysql2
, así como sus archivos de definición de tipos.
Creación de Módulo, Controlador y Servicio
A continuación, utilizamos Nest CLI para generar un módulo de usuario:
1nest generate module users2nest generate controller users3nest generate service users
Crea una entidad de usuario, añadiendo lo siguiente en src/users/user.entity.ts
:
1import { Entity, Column, PrimaryGeneratedColumn } from "typeorm";2
3@Entity()4export class User {5 @PrimaryGeneratedColumn()6 id: number;7
8 @Column()9 name: string;10
11 @Column()12 email: string;13}
En src/users/users.module.ts
, importa la entidad User:
1import { Module } from "@nestjs/common";2import { TypeOrmModule } from "@nestjs/typeorm";3import { UsersService } from "./users.service";4import { UsersController } from "./users.controller";5import { User } from "./user.entity";6
7@Module({8 imports: [TypeOrmModule.forFeature([User])],9 providers: [UsersService],10 controllers: [UsersController],11})12export class UsersModule {}
Implementación de Operaciones CRUD
En src/users/users.service.ts
, implementa las operaciones CRUD:
1import { Injectable } from "@nestjs/common";2import { InjectRepository } from "@nestjs/typeorm";3import { Repository } from "typeorm";4import { User } from "./user.entity";5
6@Injectable()7export class UsersService {8 constructor(9 @InjectRepository(User)10 private usersRepository: Repository<User>,11 ) {}12
13 findAll(): Promise<User[]> {14 return this.usersRepository.find();15 }16
17 findOne(id: number): Promise<User> {18 return this.usersRepository.findOneBy({ id });19 }20
21 create(user: User): Promise<User> {22 return this.usersRepository.save(user);23 }24
25 async update(id: number, user: User): Promise<void> {26 await this.usersRepository.update(id, user);27 }28
29 async remove(id: number): Promise<void> {30 await this.usersRepository.delete(id);31 }32}
En src/users/users.controller.ts
, define las rutas:
1import {2 Controller,3 Get,4 Post,5 Body,6 Param,7 Delete,8 Put,9} from "@nestjs/common";10import { UsersService } from "./users.service";11import { User } from "./user.entity";12
13@Controller("users")14export class UsersController {15 constructor(private readonly usersService: UsersService) {}16
17 @Get()18 findAll(): Promise<User[]> {19 return this.usersService.findAll();20 }21
22 @Get(":id")23 findOne(@Param("id") id: number): Promise<User> {24 return this.usersService.findOne(id);25 }26
27 @Post()28 create(@Body() user: User): Promise<User> {29 return this.usersService.create(user);30 }31
32 @Put(":id")33 update(@Param("id") id: number, @Body() user: User): Promise<void> {34 return this.usersService.update(id, user);35 }36
37 @Delete(":id")38 remove(@Param("id") id: number): Promise<void> {39 return this.usersService.remove(id);40 }41}
Luego, en src/app.module.ts
, configura el módulo TypeORM:
1import { Module } from "@nestjs/common";2import { TypeOrmModule } from "@nestjs/typeorm";3import { AppController } from "./app.controller";4import { AppService } from "./app.service";5import { UsersModule } from "./users/users.module";6import { User } from "./users/user.entity";7
8@Module({9 imports: [10 TypeOrmModule.forRoot({11 type: "mysql",12 host: "localhost",13 port: 3306,14 username: "root",15 password: "password",16 database: "test",17 entities: [User],18 synchronize: true,19 }),20 UsersModule,21 ],22 controllers: [AppController],23 providers: [AppService],24})25export class AppModule {}
Nota: en un entorno de producción, se recomienda configurar synchronize
a false para evitar el riesgo de pérdida de datos.
Estructura del Proyecto
La estructura del proyecto debería parecerse a:
1my-nestjs-project2├── src3│ ├── app.controller.ts4│ ├── app.module.ts5│ ├── app.service.ts6│ ├── main.ts7│ └── users8│ ├── user.entity.ts9│ ├── users.controller.ts10│ ├── users.module.ts11│ └── users.service.ts12├── test13├── .gitignore14├── nest-cli.json15├── ormconfig.json16├── package.json17├── README.md18├── tsconfig.build.json19└── tsconfig.json
Iniciar el Proyecto
Usa el siguiente comando para iniciar el proyecto:
1npm run start
Por defecto, el proyecto de NestJS se ejecutará en http://localhost:3000
. Puedes acceder a esta dirección y usar Postman u otras herramientas para probar los endpoints de la API.
Conclusión
Este artículo detalla cómo configurar un proyecto NestJS + MySQL + TypeScript desde cero, incluyendo la inicialización del proyecto, instalación de dependencias, configuración de TypeORM, creación de módulos e implementación de operaciones CRUD.