上一篇中对nest的入门已经有了一个初步的认识,现在让我们来进一步了解。一个应用的api还应该涉及数据存储,不管是使用redis还是mysql,所以了解下nest数据库(mysql)的操作。
node对mysql的操作有很多种,但是我也跟随主流,只使用sequelize和typeorm这两种方式。
TypeOrm
typeorm是个mysql的对象关系映射器,是用typescript编写的,在nest下运行非常好。
使用typeorm,必须先安装必须的依赖关系:
npm install @nestjs/typeorm typeorm mysql -S
typeorm连接数据库:
import { Module } from '@nestjs/common';
import {TypeOrmModule}. from '@nestjs/typeorm';
@Module({
TypeOrmModule.forRoot({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "root",
database: "test",
entities: [ 'src/**/*.entity.ts' ],
synchronnoze: true
})
})
export class AppModule {}
forRoot() 方法接受来自 TypeOrm 包的 createConnection() 的相同配置对象,也可以创建 ormconfig.json 配置文件配置连接参数。
存储库模式:
TypeOrm 支持存储库模式,每个实体都有自己的存储库,可以从数据库连接获取这些存储库。走个代码:
// user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn } from 'typeorm';
@Entity({name: "user"})
export class User(
@PrimaryGeneratedColumn({
name: 'id',
type: 'int',
comment: "主键ID"
})
id: number;
@Column({
name: "username",
type: "varchar",
unique: true,
length: 30,
nullable: false,
default: '',
comment: "用户名称"
})
username: string;
@Column({
name: "password",
type: "char",
nullable: true,
length: 32,
comment: "密码"
})
password: string;
@Column({
name: 'isDel',
type:"tinyint",
nullable: false,
default: () => 0,
comment: "是否删除"
})
isDel: number;
@CreateDateColumn({
type: 'timestamp',
nullable: false,
name: 'created_at',
comment: '创建时间',
})
createdAt: Date;
@UpdateDateColumn({
type: 'timestamp',
nullable: false,
name: 'updated_at',
comment: '更新时间',
})
updateAt: Date;
)
创建user模块(module)
//user.module.ts
import { Module } from '@nestjs/common';
import {TypeOrmModule} from '@nestjs/typeorm';
import { UserController } from './User.Controller.ts';
import { UserService } from './User.Service.ts';
import { User } from './user.entity.ts';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService]
})
export class UserModule{}
模块中使用forFeature() 方法定义在当前范围中注册那些存储库,就可以使用@InjectRepository() 装饰器将 UserRepository 注入到 UserService 中:
//User.Service.ts
import {Injectable} from '@nestjs/common';
import {InjectRepositoty} from '@nestjs/typeorm''
import {Repository} from 'typeorm';
import { User } from './user.entity.ts';
@Injectable()
export class UserService{
constructor(@InjectRespository(User) private readonly userRepository: Repository<User>) {};
findAll(): Promise<User[]> {
return this.userRepository.find();
}
}
以上就是一个typeorm在nestjs中使用方式,希望对大家有帮助