zoukankan      html  css  js  c++  java
  • [NestJS] Basic CRUD with Mongoose & NestJS

    main.ts

    import { NestFactory } from '@nestjs/core';
    
    import { AppModule } from './app.module';
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
    
      app.setGlobalPrefix('api');
    
      await app.listen(9000);
    }
    
    bootstrap();

    Module:

    import { Module } from '@nestjs/common';
    import { MongooseModule } from '@nestjs/mongoose';
    import { CoursesController } from './controllers/courses.controller';
    import { CoursesSchema } from './schemas/courses.schema';
    import { CoursesRepository } from './repositories/courses.repository';
    
    @Module({
      imports: [
        MongooseModule.forFeature([
          {
            name: 'Course',
            schema: CoursesSchema,
          },
        ]),
      ],
      controllers: [CoursesController],
      providers: [CoursesRepository],
    })
    export class CoursesModule {}

    Schema:

    import * as mongoose from 'mongoose';
    
    export const CoursesSchema = new mongoose.Schema({
      seqNo: Number,
      url: String,
      iconUrl: String,
      courseListIcon: String,
      description: String,
      longDescription: String,
      category: String,
      lessonsCount: Number,
      promo: Boolean,
    });

    Controller:

    import {
      Controller,
      Get,
      Param,
      Put,
      Body,
      Delete,
      Post,
    } from '@nestjs/common';
    import { Course } from '../../../../shared/course';
    import { CoursesRepository } from '../repositories/courses.repository';
    
    @Controller('courses')
    export class CoursesController {
      constructor(private couresDB: CoursesRepository) {}
    
      @Post()
      async createCourse(@Body() course: Partial<Course>): Promise<Course> {
        return this.couresDB.addCourse(course);
      }
    
      @Get()
      async findAllCourses(): Promise<Course[]> {
        return this.couresDB.findAll();
      }
    
      @Put(':courseId')
      async updateCourse(
        @Param('courseId') courseId: string,
        @Body() changes: Partial<Course>,
      ): Promise<Course> {
        return this.couresDB.updateCourse(courseId, changes);
      }
    
      @Delete(':courseId')
      async deleteCourse(@Param('courseId') courseId: string) {
        return this.couresDB.deleteCourse(courseId);
      }
    }

    Repository:

    import { Injectable } from '@nestjs/common';
    import { Course } from '../../../../shared/course';
    import { InjectModel } from '@nestjs/mongoose';
    import { Model } from 'mongoose';
    
    @Injectable()
    export class CoursesRepository {
      constructor(@InjectModel('Course') private courseModel: Model<Course>) {}
    
      async addCourse(course: Partial<Course>): Promise<Course> {
        // Create a memory version
        const newCourse = this.courseModel(course);
        // save to db
        await newCourse.save();
        // return the FE version data
        return newCourse.toObject({
          version: false, // without any mongoose props
        });
      }
    
      async findAll(): Promise<Course[]> {
        return this.courseModel.find();
      }
    
      async updateCourse(id: string, changes: Partial<Course>): Promise<Course> {
        return this.courseModel.findOneAndUpdate(
          { _id: id },
          changes,
          { new: true }, // return a new version of the data
        );
      }
    
      async deleteCourse(id: string) {
        return this.courseModel.deleteOne({ _id: id });
      }
    }
  • 相关阅读:
    MASM32_SDKv10以及一些帮大家打包的东西
    Visual C++6.0 with SP6(中英文版)
    Code::Blocks(完全取代VC6的开源跨平台编程利器)
    汇编学习必备 汇编金手指
    Visual C++6.0 with SP6(中英文版)
    汇编学习必备 汇编金手指
    Code::Blocks(完全取代VC6的开源跨平台编程利器)
    Masm5.0、6.15 汇编语言编译器
    [原创 flash] 用flash制作mp3音乐播放器
    php中,将string转变成date
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12184475.html
Copyright © 2011-2022 走看看