Aprende a crear un proyecto de Nestjs y React, usando Typescript que permita hacer operaciones CRUD

Consideraciones

  • El frontend hará uso de React junto con Typescript (ya que estaremos usando Typescript en el backend con Nesta, tambien lo usaremos con React)
  • El frontend sera creado con Vite, usando tambien Typescript

creacion del proyecto

mkdir nestjs-react-crud
cd nestjs-react-crud

creacion del backend

nest new tasksapi

creacion de modulo de tareas

nest g mo tasks
nest g co tasks --no-spec
nest g s tasks --no-spec

Conectar a Mongodb

npm i @nestjs/mongoose mongoose

Luego en en app.module.ts:

import { Module } from '@nestjs/common';
import { TasksModule } from './tasks/tasks.module';
import { MongooseModule } from '@nestjs/mongoose';

@Module({
  imports: [
    TasksModule,
    MongooseModule.forRoot('mongodb://localhost:27017/nestjs'),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

crea un esquema en schema/task.schema.ts:

import { Prop, SchemaFactory } from '@nestjs/mongoose';
import { HydratedDocument } from 'mongoose';

export type TaskDocument = HydratedDocument<Task>;

export class Task {
  @Prop()
  title: string;

  @Prop()
  description: string;

  @Prop()
  done: boolean;
}

export const TaskSchema = SchemaFactory.createForClass(Task);

Luego en task.module.ts:

import { Module } from '@nestjs/common';
import { TasksController } from './tasks.controller';
import { TasksService } from './tasks.service';
import { MongooseModule } from '@nestjs/mongoose';
import { Task, TaskSchema } from 'src/schemas/task.schema';

@Module({
  imports: [
    MongooseModule.forFeature([{ name: Task.name, schema: TaskSchema }]),
  ],
  controllers: [TasksController],
  providers: [TasksService],
})
export class TasksModule {}

Añadir validaciones

https://docs.nestjs.com/techniques/validation

Despliegue

En cuanto al despleigue de la aplicación estaremos desplegando cada proyecto por separado, de alli tambien que hayamos necesitado de instalar CORS, ya que obtendremos dominios distintos