0%

nestjs+vue3前后端项目并配置ssl(nest与mysql篇)

本文使用的技术栈: Vue3+Vite+Axios+Pinia、Nestjs+Typeorm+mysql2

本篇记录nestjs连接mysql操作

生成nest项目

首先输入以下命令生成nest项目

1
2
3
4
5
6
7
8
# 全局安装脚手架
npm i -g @nestjs/cli
# 生成项目
nest new project-name
# 进入项目根目录
cd project-name
# 安装依赖(我在生成项目时选择的npm包管理)
npm i


此时我的项目结构如图所示,其中的.spec.ts后缀和/test文件夹是测试用的,我直接删除了。

配置mysql

  1. 安装所需要的插件npm i mysql2 typeorm
  2. 进入app.module.ts文件内,进行数据库的配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # app.module.ts

    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';

    import { UsersModule } from './users/users.module';

    @Module({
    imports: [
    TypeOrmModule.forRoot({
    type: 'mysql',
    host: 'your_host',
    port: 'your_port',
    username: 'your_username',
    password: 'your_pwd',
    database: 'your_database_name',
    autoLoadEntities: true,
    synchronize: true,
    }),
    UsersModule,
    ]
    })
    export class AppModule {}
    UsersModule是数据库内表的模块,要在appmodule引入,app模块不需要用到控制器和服务,所以直接去除了原有的controller和service。
    typeorm内的autoLoadEntities是自动加载实体,synchronize是根据实体自动创建数据库表, 如果是生产环境建议关闭。

操作mysql

新建表

  1. 创建users文件夹
    在users文件夹内新建以下文件users.module.ts users.controller.ts users.service.ts user.entity.ts
    其中users.module.ts是管理控制器和服务的,并且要把entity这个users实体导入
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    # users.module.ts
    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { User } from './user.entity';
    import { UsersController } from './users.controller';
    import { UsersService } from './users.service';

    @Module({
    imports: [TypeOrmModule.forFeature([User])],
    providers: [UsersService],
    controllers: [UsersController],
    })
    export class UsersModule {}

    --------------------------------------------------
    # users.controller.ts
    import {
    Query,
    Controller,
    Get,
    Response
    } from '@nestjs/common';
    import { UsersService } from './users.service';

    @Controller('')
    export class UsersController {
    constructor(private readonly usersService: UsersService) {}

    @Get('getUser')
    user(@Query() data: any, @Response() res:any): any {
    this.usersService.getUser(data.id).then((r) => {
    return res.send({
    code: 200,
    data: {id:data.id},
    message: 'success'
    });
    })

    }
    }

    ----------------------------------------------------------
    # users.service.ts
    import { Injectable } from '@nestjs/common';
    import { InjectRepository } from '@nestjs/typeorm';
    import { Repository } from 'typeorm';
    import { User } from './user.entity';

    @Injectable()
    export class UsersService {

    constructor(
    @InjectRepository(User)
    private readonly usersRepository: Repository<User>,
    ) {}

    async getUser(id:string): Promise<User[]> {
    return this.usersRepository.query(`select * from user where id=${id}`);
    }
    }
    大体上和koa、express一样。在typeorm有提供sdk直接进行增删改查,我直接自定义sql语句没有使用,有兴趣可以去官网查看。