1.创建数据库
CREATE TABLE `admin_user` (
`user_id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`account_name` varchar(24) NOT NULL COMMENT '用户账号',
`real_name` varchar(20) NOT NULL COMMENT '真实姓名',
`passwd` char(32) NOT NULL COMMENT '密码',
`passwd_salt` char(6) NOT NULL COMMENT '密码盐',
`mobile` varchar(15) NOT NULL DEFAULT '0' COMMENT '手机号码',
`role` tinyint(4) NOT NULL DEFAULT '3' COMMENT '用户角色:0-超级管理员|1-管理
员|2-开发&测试&运营|3-普通用户(只能查看)',
`user_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态:0-失效|1-有效|2-删
除',
`create_by` smallint(6) NOT NULL COMMENT '创建人ID',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` smallint(6) NOT NULL DEFAULT '0' COMMENT '修改人ID',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`user_id`),
KEY `idx_m` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='后台用户表';
2、使用 Sequelize 操作数据库
npm i sequelize sequelize-typescript mysql2 -S
// src/database/sequelize.ts
import { Sequelize } from 'sequelize-typescript';
import db from '../../config/db';
const sequelize = new Sequelize(
db.mysql.database,
db.mysql.user,
db.mysql.password || null,
{
// 自定义主机; 默认值: localhost
host: db.mysql.host, // 数据库地址
// 自定义端口; 默认值: 3306
port: db.mysql.port,
dialect: 'mysql',
pool: {
max: db.mysql.connectionLimit, // 连接池中最大连接数量
min: 0, // 连接池中最小连接数量
acquire: 30000,
idle: 10000, // 如果一个线程 10 秒钟内没有被使用过的话,那么就释放线程
},
timezone: '+08:00', // 东八时区
},
);
// 测试数据库链接
sequelize
.authenticate()
.then(() => {
console.log('数据库连接成功');
})
.catch((err: any) => {
// 数据库连接失败时打印输出
console.error(err);
throw err;
});
export default sequelize;
3.调用数据库查询
// src/logical/user/user.service.ts
import { Injectable } from '@nestjs/common';
import * as Sequelize from 'sequelize'; // 引入 Sequelize 库
import sequelize from '../../database/sequelize'; // 引入 Sequelize 实例
@Injectable()
export class UserService {
async findOne(username: string): Promise<any | undefined> {
const sql = `
SELECT
user_id id, real_name realName, role
FROM
admin_user
WHERE
account_name = '${username}'
`; // 一段平淡无奇的 SQL 查询语句
try {
const res = await sequelize.query(sql, {
type: Sequelize.QueryTypes.SELECT, // 查询方式
raw: true, // 是否使用数组组装的方式展示结果
logging: true, // 是否将 SQL 语句打印到控制台,默认为 true
});
const user = res[0]; // 查出来的结果是一个数组,我们只取第一个。
if (user) {
return {
code: 200, // 返回状态码,可自定义
data: {
user,
},
msg: 'Success',
};
} else {
return {
code: 600,
msg: '查无此人',
};
}
} catch (error) {
return {
code: 503,
msg: `Service error: ${error}`,
};
}
}
}