nestjs
创建项目
$ 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);
}
}