Nest.js 学习笔记(三)

121 阅读1分钟

一、typeorm 数据库链接

node.js 可以使用第三方写的包来链接 mysql mongodb 等数据库。 我这里用 mysql 数据库, node.js 框架是 nest.js.

安装

pnpm add --save @nestjs/typeorm typeorm mysql mysql2 -w

数据库 config 基本配置

// src/config/db.config.ts
import { DataSource, DataSourceOptions } from 'typeorm';

// 基础配置
const baseConfig: DataSourceOptions = {
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: '123456',
  database: 'school',
  synchronize: false, // 数据库自动同步 entity 文件修改
};

// 该对象用于 nestjs typeorm 初始化
export const ormConfig: DataSourceOptions = {
  ...baseConfig,
  entities: ['dist/**/entities/*.entity{.js,.ts}'],
};

// 该对象 typeorm cli 迁移时使用
const ormConfigForCli: DataSourceOptions = {
  ...baseConfig,
  entities: ['src/**/entities/*.entity{.js,.ts}'],
  migrations: ['migrations/*{.js,.ts}'],
  subscribers: ['subscribers/*{.js,.ts}'],
  logger: 'file',
  logging: true,
};

// 实例化dataSource,用以之后cli使用
const dataSource = new DataSource(ormConfigForCli);

// 此处的dataSource需要 export default才可以使用
export default dataSource;

如何定义一个表

这里通过 @Entity() 这个装饰器方法表示这里是一个表的定义

Nav 类是表的实例对象,代表定义了一个表, Nav 作为名字,id 是这个表的字段

@PrimaryGeneratedColumn() 是表唯一的自增主键的快捷写法

@Column({length: 45}) 装饰器是定义了一个新的列 {length: 45 } 是这个列的相关配置

// src/entities/xxxx.entity.ts
      import { PrimaryGeneratedColumn, Column, Entity } from "typeorm";
      @Entity()
      export class Nav {
        @PrimaryGeneratedColumn()
        id: number;
      
        @Column({length: 45})
        name: string;
      
        @Column({length:255})
        url: string;
      
        @Column('int')
        status: number;
      }