nestjs

中文文档:Nest.js 中文文档 (nestjs.cn)

创建项目

$ nest new project-name

# 选择包管理器 这里使用yarn
? Which package manager would you ❤️  to use?
  npm
❯ yarn
  pnpm

# 扩展:创建子项目
$ nest g app subprojects-name

创建公共模块

初始化好项目后,就要创建数据模型了,首先在项目中创建一个公用模块,询问是否使用默认的引用前缀,我修改为了@libs

$ nest g lib db
? What prefix would you like to use for the library (default: @app)? @libs

然后在app.module.ts中引用db模块,输入DbModule会自动引用db模块

@Module({
  imports: [
    DbModule
  ],
  controllers: [AppController],
  providers: [AppService],
})

连接数据库

中文文档:技术 -数据库 (nestjs.cn)

创建好数据库模块后就是连接数据库了,首先需要安装一些连接数据库要用到的依赖包

使用MongoDB

# Nestjs连接数据库需要的包
$ yarn add nestjs-typegoose  @typegoose/typegoose

# Nodejs中连接数据库必要的包和ts的支持
$ yarn add mongoose  @types/mongoose

# 快速创建数据库crud的包
$ yarn add nestjs-mongoose-crud

使用Mysql

$ yarn add @nestjs/typeorm typeorm mysql2
// app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'test',
      entities: [],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

Swagger配置

安装swagger相关依赖

$ yarn add @nestjs/swagger swagger-ui-express

在main.ts中配置

const options = new DocumentBuilder()
  .setTitle('天舟OA统一管理后台API')
  .setDescription('供后台管理界面调用的服务端API')
  .setVersion('1.0')
  .addBearerAuth()
  .build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup('api-docs', app, document);

const PORT = process.env.PORT || 6701;
await app.listen(PORT);
console.log(`http://localhost:${PORT}/api-docs`);

redis配置

安装相关依赖

$ yarn add redis

创建redis.service.ts服务 封装操作redis的方法

import { Injectable } from '@nestjs/common';
import { createClient } from 'redis';

@Injectable()
export class RedisService {
  private client: any;
  constructor() {
    this.CreateClient();
  }

  private async CreateClient() {
    this.client = createClient({
      url: 'redis://:[password]@[host]:[port]',
    });
    this.client.on('error', (err) => console.log('Redis Client Error', err));

    await this.client.connect();
  }

  /**
   * @Description: 封装设置redis缓存的方法
   * @param key {String} key值
   * @param value {String} key的值
   * @param seconds {Number} 过期时间
   * @return: Promise<any>
   */
  public async set(key: string, value: any, seconds?: number): Promise<any> {
    value = JSON.stringify(value);
    if (!this.client) {
      await this.CreateClient();
    }
    if (!seconds) {
      await this.client.set(key, value);
    } else {
      await this.client.set(key, value, 'EX', seconds);
    }
  }

  /**
   * @Description: 设置获取redis缓存中的值
   * @param key {String}
   */
  public async get(key: string): Promise<any> {
    if (!this.client) {
      await this.CreateClient();
    }

    const data = await this.client.get(key);

    if (data) {
      return JSON.parse(data);
    } else {
      return null;
    }
  }

  /**
   * @Description: 根据key删除redis缓存数据
   * @param key {String}
   * @return:
   */
  public async del(key: string): Promise<any> {
    if (!this.client) {
      await this.CreateClient();
    }

    await this.client.del(key);
  }
}

工具文档

eureka-node-client - npm (npmjs.com)

nestjs-redis - npm (npmjs.com)

redis - npm (npmjs.com)