手把手教你用nestjs框架7分钟生成crud风格接口

1.安装nest.js框架

nest.js官方开发文档

  • 全局安装nest框架
npm i -g @nestjs/cli

2. 新建一个nestjs项目

nest new nest-api

image.png

选择是用npm还是yarn装依赖,我是直接回车选择npm

如果觉得慢此处可以取消,用vscode打开nest-api项目

终端再来安装依赖

npm i

image.png

等待安装完成

npm run start

image.png
如果是这样,则项目是成功跑起来的

3. 新建一个公共库文件,用来放mongose数据库的设计model

nest g lib db @libs

image.png

输入@libs 回车

image.png

此时应该多了一个libs文件夹

image.png

4. 安装nest数据库依赖

npm i nestjs-typegoose @typegoose/typegoose mongoose @types/mongoose nestjs-mongoose-crud @nestjs/swagger swagger-ui-express

5. 创建user表的model

  • 在libs/src 目录下新建 models 文件夹,然后在models文件夹下新建 user.model.ts 的ts文件

image.png

  • 在文件里写入如下代码
import { prop, modelOptions } from '@typegoose/typegoose';
  import {ApiProperty} from '@nestjs/swagger';

  // 给添加的数据加入时间戳
  @modelOptions({
    schemaOptions:{
    timestamps:true
    }
})
  
  export class User{
  
  @ApiProperty({description:'用户名',example:'user1'})
  
    @prop()
  
    username: string
  
    @ApiProperty({description:'密码',example:'password1'})
    @prop()
  
    password: string
    
  }

6. 用nest命令创建users文件夹

 nest g mo -p users users
 nest g co -p users users

image.png

  • 然后在users/users.controller.ts 里写入控制代码
 import { Controller } from '@nestjs/common';
  import { InjectModel } from 'nestjs-typegoose';
  import {User} from '@libs/db/models/user.model'
  import { Crud } from "nestjs-mongoose-crud";
  import {ApiTags} from '@nestjs/swagger'
  
  @Crud({
    // User采用增删改查接口模式
    model:User
  })
  
  @Controller('users')
  @ApiTags('用户')
  export class UsersController {
    // 注入User模型
    constructor(@InjectModel(User) private readonly model){}
  }

7.在libs/db/src/db.model.ts里配置db

  • db.model.ts 写入如下代码
  • 注意!此处用的是本人数据库地址,请自行申请一个免费线上数据库地址,或者自己的本地mongoDB数据库地址
  • 如何申请线上数据库 请移步 https://segmentfault.com/a/11...

import { Module, Global } from '@nestjs/common';
  import { DbService } from './db.service';
  import { TypegooseModule } from 'nestjs-typegoose';
  import { User } from './models/user.model';
  
  const models = TypegooseModule.forFeature([User]);
  
  @Global()
  @Module({
    imports: [
      TypegooseModule.forRoot(
        '
mongodb+srv://root:root@cluster0-bujei.mongodb.net/nest-api?retryWrites=true&w=majority
',
        {
          useCreateIndex: true,
          useUnifiedTopology: true,
          useNewUrlParser: true,
        useFindAndModify: false,
        },
    ),
      models,
  ],
    providers: [DbService],
  exports: [DbService, models],
  })
  export class DbModule {}

8.在根目录的src/app.module.ts 里引用db 以及users

  • 写入如下代码
 import { Module } from '@nestjs/common';
  import { AppController } from './app.controller';
  import { AppService } from './app.service';
  import { DbModule } from '@libs/db';
  import { UsersModule } from './users/users.module';
  
  @Module({
    imports: [DbModule, UsersModule],
    controllers: [AppController],
    providers: [AppService],
  })
  export class AppModule {}

9.在main.ts里面配置swagger 以及启动端口

  • 根目录src/main.ts 里面写入如下代码
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors();
  const options = new DocumentBuilder()
    .setTitle('nest后台API')
    .setDescription('供后台管理界面调用的服务端API')
    .setVersion('1.0')
    // .addTag('cats')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api-docs', app, document);

  await app.listen(3000);
  console.log('http://localhost:3000');
  console.log('http://localhost:3000/api-docs');
}
bootstrap();

10.启动后端服务

npm run start

image.png

如图就是启动服务成功了

http://localhost:3000 就是你的本地接口地址

http://localhost:3000/api-docs 就是你的本地接口文档地址

image.png

看,写简单crud接口就是这么简单

阅读 1.1k

推荐阅读
nodejs爬坑之路
用户专栏

0 人关注
1 篇文章
专栏主页