Skip to content

node.js配合nest写接口简单流程

1.首先,在app.module.ts里面引入数据库

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { BlogModule } from './modules/blog/blog.module';
import { join } from 'path';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'wuyunxia.00',
      database: 'my-node',
      entities: [join(__dirname, '../', 'dist', '**/**.entity{.ts,.js}')],
      synchronize: true,
    }),
    BlogModule
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

  1. 在entity文件里面注册上所需表的所有字段
import { CustomBaseEntity } from "src/common/entity";
import { Column, Entity } from "typeorm";


@Entity({ name: 'blog' })
export class Blog extends CustomBaseEntity{
    @Column('varchar', {
        comment: '标题',
        default: ''
    })
    title: string;

    @Column('longtext', {
        comment: '内容',
        default: null
    })
    content: string;

    @Column('varchar', {
        comment: '标签',
        default: null
    })
    tag: string;

    @Column('varchar', {
        comment: '描述',
        default: ''
    })
    description: string;

    @Column('varchar', {
        name: 'cover_pic',
        comment: '封面',
        default: ''
      })
      coverPic: string;
}
  1. 新建文件夹,名为dto,里面文件写你所定义的字段默认值等
import { IsNotEmpty } from "class-validator";

export class BlogDTO {
    @IsNotEmpty({
        message: '标题不能为空!'
    })
    title: string;

    @IsNotEmpty({
        message: '内容不能为空!'
    })
    content: string;
}

export class CreateDto {
    @IsNotEmpty({
        message: '标题不能为空!'
    })
    title: string;

    @IsNotEmpty({
        message: '内容不能为空!'
    })
    content: string;

    tag: string;

    description: string;

    coverPic: string;

    id: number;
}

4.在Controller里面写接口,传参等

import { Body, Controller, Get, Param, Post } from "@nestjs/common";
import { CreateDto } from "./dto/blog.dto";
import { BlogService } from "./blog.service";

@Controller('blog')
export class BlogController {
    constructor(private readonly BlogService: BlogService) {}

    // 新增博客
    @Post('/add')
    create(@Body() param: CreateDto) {
        console.log(param);
        
        return this.BlogService.create(param);
    }

}

5.在service里面写上处理的sql,回调等(这里要用primise,不然取不到)

import { Injectable } from "@nestjs/common";
import { CreateDto } from "./dto/blog.dto";
import { InjectRepository } from "@nestjs/typeorm";
import { Repository } from "typeorm";
import { Blog } from "./blog.entity";
import { ResultType, apiResError, apiResSuccess } from "src/utils/responseCommon";

@Injectable()
export class BlogService {
    constructor(
        @InjectRepository(Blog)
        private blogRepository: Repository<Blog>
    ) {}
    // 新增博客
    async create(param: CreateDto): Promise<ResultType> {
        const { title, content, tag, description, coverPic } = param
        // 查重
        // const checkExit = this.blogRepository.findOne({
        //     where: { title, }
        // })
        const result = await this.blogRepository.save({
            title, content, tag, description, coverPic
        })
        // 判断是否添加成功
        if(result.id) {
            return apiResSuccess()
        } 
        return apiResError()
    }
}

6.别忘了在Module里面注册你的组件

import { Module } from '@nestjs/common';
import { BlogController } from './blog.controller';
import { BlogService } from './blog.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Blog } from './blog.entity';
@Module({
    imports: [TypeOrmModule.forFeature([Blog])], // 你的表
    controllers: [BlogController], // 你的controller
    providers: [BlogService], // 你的service
    // exports: [ArticleColumnService] // 其他页面调用时需要
  })
  export class BlogModule {}

最后,在app.module里面接收模块BlogModule

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { BlogModule } from './modules/blog/blog.module';
import { join } from 'path';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'my-node',
      entities: [join(__dirname, '../', 'dist', '**/**.entity{.ts,.js}')],
      synchronize: true,
    }),
    BlogModule // 你的模块
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}