为什么选用nest.js开发?
?之前也是使用过egg.js写过增删改查,对于egg.js的给我的体验感约束性很强,文档也很完善,但是对于Typescript的支持并不好,都2022年了,ts的应用也该很广泛了吧,所以此次开发选择了nest.js~
安装依赖包
npm install @nestjs/typeorm typeorm mysql2 -S
建立配置
?对于我们连接mysql的账密以及ip,我们将其存储在.env/.env.prod中。我们在根目录创建config文件夹,并创建env.ts,代码如下:
import * as fs from 'fs';
import * as path from 'path';
const isProd = process.env.NODE_ENV === 'production';
function parseEnv() {
const localEnv = path.resolve('.env');
const prodEnv = path.resolve('.env.prod');
if (!fs.existsSync(localEnv) && !fs.existsSync(prodEnv)) {
throw new Error('缺少环境配置文件');
}
const filePath = isProd && fs.existsSync(prodEnv) ? prodEnv : localEnv;
return { path: filePath };
}
export default parseEnv();
创建.env/.env.prod文件,如下:
# 数据库地址
DB_HOST=ip地址
# 数据库端口
DB_PORT=3306
# 数据库登录名
DB_USER=root
# 数据库登录密码
DB_PASSWD=password
# 数据库名字
DB_DATABASE=db_name
引入此配置,并创建连接
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigService, ConfigModule } from '@nestjs/config';
import envConfig from '../config/env';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './user/user.module';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: [envConfig.path],
}),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
type: 'mysql',
host: configService.get('DB_HOST', '默认值'),
port: configService.get<number>('DB_PORT', 3306),
username: configService.get('DB_USER', '默认值'),
password: configService.get('DB_PASSWORD', '默认值'),
database: configService.get('DB_DATABASE', '默认值'),
timezone: '+08:00',
synchronize: true,
entities: ['dist/**/*.entity{ .ts,.js}'],
}),
}),
UserModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
创建服务
# 生成user模块
nest g mo user
# 生成相应的service
nest g s user
# 生成相应的controller
nest g co user
执行对应的命令后我们可以删除其测试文件,接下来我们需要创建其对应的实体文件(这个时候数据库是已经创建好的),在user文件夹创建user.entity.ts文件,其内容如下:
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity('cd_user')
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 50})
username: string;
@Column({ length: 20 })
gender: string;
}
对应的user.service.ts文件:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll() {
return this.usersRepository.find();
}
}
对应的user.controller.ts文件:
import { Body, Controller, Get, Post } from '@nestjs/common';
import { XCommonRet } from 'xmcommon';
import { UserService } from './user.service';
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get('all')
async all() {
const r = new XCommonRet();
r.setData(await this.userService.findAll());
return r;
}
}
对应的user.module.ts文件:
import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserController } from './user.controller';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [UserService],
controllers: [UserController],
exports: [TypeOrmModule],
})
export class UserModule {}
结束
?对于curd,以及其他对数据库的操作,想要了解更深的同学可以去看一下typeorm的文档,本文章只介绍如何连接mysql啦~
|