本文已参与「新人创作礼」活动,一起开启掘金创作之路。
本文主要介绍nestjs中使用sequelize完成用户表的操作
首先下载相关的包
$ npm install --save @nestjs/sequelize sequelize sequelize-typescript mysql2
$ npm install --save-dev @types/sequelize
SequelizeModule导入到根AppModule中
// app.module
import { Module } from '@nestjs/common';
import { UsersModule } from './users/users.module';
import { SequelizeModule } from '@nestjs/sequelize';
import { User } from './users/user.model'; // 定义的User模型,后面我们定义
@Module({
imports: [
SequelizeModule.forRoot({
dialect: 'mysql', // 数据库类型,sequelize支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 且对数据库版本有要求。可移步官网查看
host: '127.0.0.1', // 主机ip
port: 3306, // 数据库端口 mysql默认在3306端口
username: 'xxx', // 数据库用户名
password: 'xxx', // 数据库密码
database: 'xxx', // 具体数据库
models: [User], // 要开始使用`User`模型,我们需要通过将其插入到`forRoot()`方法选项的`models`数组中来让`Sequelize`知道它的存在。
}),
UsersModule,
],
})
export class AppModule {}
定义User模型
// users/user.model
import { Column, Table, Model } from 'sequelize-typescript';
@Table({
tableName: 'admin_user', // 指定表名。默认会使用模型名(User)生成sql。
timestamps: false, // 默认true。true时会带createdAt、updatedAt字段查表
})
export class User extends Model<User> {
@Column
username: string;
@Column
password: string;
@Column
email: string;
@Column
mobile: string;
@Column
create_time: Date;
}
完成上述操作后需要在user.mudule注入才可以在user.serveice中使用User模型
// users/user.module
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
import { SequelizeModule } from '@nestjs/sequelize';
import { User } from './user.model';
@Module({
controllers: [UsersController],
providers: [UsersService],
imports: [SequelizeModule.forFeature([User])], // 确保service用@InjectRepository()装饰器将 UsersRepository 注入到 UsersService 中:
})
export class UsersModule {}
注入完后,就可以在构造函数中给UserService挂上User模型。便于后续的数据库操作(例子中只给出【查】操作。单表的增、删、改等都大同小异。可到sequelize官网学习相关操作)
// users/user.service
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/sequelize';
import { User } from './user.model';
@Injectable()
export class UsersService {
constructor(
@InjectModel(User)
private userModel: typeof User,
) {}
findAll(): Promise<User[]> {
return this.userModel.findAll(); // 使用userModel查全部数据
}
find(id: string): Promise<User> {
return this.userModel.findOne({ where: { id } }); // 使用userModel限制条件查选
}
}
最后看一下controller部分的代码。走通整个过程
// users/user.controller
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { UsersService } from './users.service';
import { User } from './user.model';
@Controller('users')
export class UsersController {
constructor(private usersService: UsersService) {}
@Get('users')
async findAll(): Promise<User[]> {
const r = await this.usersService.findAll();
console.log(r);
return r;
}
@Get(':id')
async findOne(@Param() params): Promise<User> {
const { id } = params;
return await this.usersService.find(id);
}
}