Nestjs学习day9

81 阅读1分钟

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}`,
      };
    }
  }
}