Open felix-cao opened 4 days ago
需要集成 MySql 和 TypeORM 我们的数据库里有一张user表,包含的字段:id,name(名字),age(年龄)sql如下:
MySql
TypeORM
user
id
name
age
sql
CREATE TABLE IF NOT EXISTS user ( `id` VARCHAR(36) PRIMARY KEY, `username` VARCHAR(255) NOT NULL, `email` VARCHAR(255) DEFAULT NULL, `mobile` VARCHAR(11) DEFAULT NULL, `password` VARCHAR(255) NOT NULL, `role` INT(2) NOT NULL, `is_active` TINYINT(1) DEFAULT 1, `created_at` DATETIME DEFAULT NULL, `updated_at` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP );
不执行上面的 SQL 语句, 创建 user.entity.ts 实体类, 在 npm start 后,TypeORM 会自动创建 user 表.
SQL
user.entity.ts
npm start
$ npm install --save @nestjs/typeorm typeorm @types/bcryptjs mysql2 bcryptjs
$ nest g mo user $ nest g co user --no-spec $ nest g s user --no-spec
在 src/user 目录下创建 user 实体类 user.entity.ts
src/user
// src/user/user.entity.ts import { Entity, Column, CreateDateColumn, UpdateDateColumn, PrimaryGeneratedColumn, } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn('uuid') id: string; @Column({ unique: true }) username: string; @Column({ select: false }) password: string; @Column() role: number; @Column('bool') is_active: boolean; @CreateDateColumn() created_at: Date; @UpdateDateColumn() updated_at: Date; }
创建查询,添加user的方法
// src/user/user.service.ts import { Injectable } from '@nestjs/common'; import { User } from './user.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; @Injectable() export class UserService { constructor( @InjectRepository(User) private usersRepository: Repository<User>, ) {} create(user: User): Promise<User> { return this.usersRepository.save(user); } findAll(): Promise<User[]> { return this.usersRepository.find(); } }
在 user.controller.ts 添加对应 api 请求接口:
user.controller.ts
api
// src/user/user.controller.ts import * as bcrypt from 'bcryptjs'; import { User } from './user.entity'; import { UserService } from './user.service'; import { Body, Controller, Get, Post } from '@nestjs/common'; @Controller('users') export class UserController { constructor(private readonly userService: UserService) {} @Post() create(@Body() user: User): Promise<User> { const salt = bcrypt.genSaltSync(); console.log('\r\n-----------', salt); user.password = bcrypt.hashSync(user.password); return this.userService.create(user); } @Get() findAll(): Promise<User[]> { return this.userService.findAll(); } }
上面的代码使用 bcrypt 对 password 进行 hash 加密后入库。
bcrypt
password
hash
在 user.module.ts 中引入 TypeORM 和 user.entity.ts 实体类映射 MySQL user 表
user.module.ts
MySQL
// src/user/user.module.ts import { Module } from '@nestjs/common'; import { UserController } from './user.controller'; import { UserService } from './user.service'; import { User } from './user.entity'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [TypeOrmModule.forFeature([User])], controllers: [UserController], providers: [UserService], }) export class UserModule {}
在项目 src/app.module.ts(root module)中通过@nestjs/typeorm来链接 MySQL
src/app.module.ts
root module
@nestjs/typeorm
import { Module } from '@nestjs/common'; import { AuthModule } from './auth/auth.module'; import { TasksModule } from './tasks/tasks.module'; import { UserModule } from './user/user.module'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'zenbly', password: 'my-secret-local-db-password', database: 'wetodo', entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: true, }), AuthModule, TasksModule, UserModule, ], }) export class AppModule {}
现在可以去测试一把接口了。
需要集成
MySql
和TypeORM
我们的数据库里有一张user
表,包含的字段:id
,name
(名字),age
(年龄)sql
如下:不执行上面的
SQL
语句, 创建user.entity.ts
实体类, 在npm start
后,TypeORM
会自动创建user
表.一、 安装 TypeORM, Mysql 依赖
二、创建 user module
2.1 创建User实体类
在
src/user
目录下创建user
实体类user.entity.ts
2.2 创建 user.service.ts
创建查询,添加
user
的方法2.3 创建 user.controller.ts
在
user.controller.ts
添加对应api
请求接口:上面的代码使用
bcrypt
对password
进行hash
加密后入库。2.4 在 module 中加入实体类映射
在
user.module.ts
中引入TypeORM
和user.entity.ts
实体类映射MySQL
user
表三、配置 MySQL connect
在项目
src/app.module.ts
(root module
)中通过@nestjs/typeorm
来链接MySQL
现在可以去测试一把接口了。