nestjs连接远程mysql_Nestjs 链接mysql

本文介绍如何在NestJS应用中集成TypeORM,并通过MySQL数据库创建cats模块及其相关组件,包括实体、服务和控制器。同时解决可能出现的客户端认证问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下插件

λ yarn add @nestjs/typeorm typeorm mysql

创建 cats模块, 控制器,service

λ nest g mo cats

λ nest g co cats

λ nest g s cats cats/

Client does not support authentication protocol requested by server; consider u pgrading MySQL client 如果出现这个错误 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的数据库密码';

// app.module.ts

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

import { AppController } from './app.controller';

import { AppService } from './app.service';

import { TypeOrmModule } from '@nestjs/typeorm'; #

import { Connection } from 'typeorm'; #

import { CatsModule } from './cats/cats.module';

@Module({

imports: [

TypeOrmModule.forRoot({

type: 'mysql',

host: 'localhost',

port: 3306,

username: 'root',

password: 'mysql登录密码',

database: 'nest',

entities: [__dirname + '/**/*.entity{.ts,.js}'],

synchronize: true,

}), #

CatsModule

],

controllers: [AppController],

providers: [AppService],

})

export class AppModule {

constructor(private readonly connection: Connection) {} #

}

编辑 entity

// cats.entity.ts

import { PrimaryGeneratedColumn, Column, Entity } from "typeorm";

@Entity()

export class Cats {

@PrimaryGeneratedColumn()

id: number;

@Column({length: 45})

name: string;

@Column('int')

age: number;

}

在cats.module.ts 中使用

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

import { Cats } from './cats.entity';

@Module({

imports: [TypeOrmModule.forFeature([Cats])],

})

export class CatsModule {}

注入 cats.service.ts

import { Injectable } from '@nestjs/common';

import { InjectRepository } from '@nestjs/typeorm';

import { Cats } from './cats.entity';

import { Repository } from 'typeorm';

@Injectable()

export class CatsService {

constructor(

@InjectRepository(Cats)

private readonly catsRepository: Repository

) { }

find(){

return this.catsRepository.find()

}

getCat(name:string): Promise {

return this.catsRepository.find({ name });

}

}

### 在 NestJS 中使用 MySQL 数据库 #### 安装依赖包 为了使 NestJS 应用能够与 MySQL 数据库交互,需先安装必要的 npm 包。这包括 `@nestjs/typeorm` 和 `mysql2` 两个主要模块[^1]。 ```bash npm install @nestjs/typeorm typeorm mysql2 reflect-metadata --save ``` #### 配置 TypeORM 模块 接下来,在应用程序的根模块 (`app.module.ts`) 文件内引入并配置 TypeORMModule 来设置数据库连接参数: ```typescript import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', // 或者远程服务器地址 port: 3306, username: 'root', password: '', database: 'testdb', entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: true, // 生产环境中应设为 false 并手动管理迁移 logging: false, }), ], }) export class AppModule {} ``` 上述代码片段展示了如何通过 TypeORM 的方式来定义一个基本的数据源配置。 #### 创建实体类 创建一个新的 TypeScript 类作为表结构模型表示形式(即 Entity),比如 User 实体: ```typescript import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column({ length: 50 }) name: string; } ``` 此段落描述了怎样利用装饰器语法构建简单的用户信息表格映射。 #### 编写 CRUD 控制器逻辑 编写控制器用于处理 HTTP 请求,并调用相应的服务层方法完成具体的业务功能。这里给出的是基于 Express 路由风格的一个例子: ```typescript import { Controller, Get, Post, Body, Param, Delete, Put } from '@nestjs/common'; import { UserService } from './user.service'; // 自己的服务文件路径 import { CreateUserDto } from './dto/create-user.dto'; // DTO 对象验证输入有效性 @Controller('users') export class UserController { constructor(private readonly userService: UserService) {} @Post() create(@Body() createUserDto: CreateUserDto): Promise<User> { return this.userService.create(createUserDto); } @Get() findAll(): Promise<User[]> { return this.userService.findAll(); } @Get(':id') findOne(@Param('id') id: string): Promise<User> { return this.userService.findOne(id); } @Put(':id') update( @Param('id') id: string, @Body() updateUserDto: UpdateUserDto, ): Promise<void> { return this.userService.update(+id, updateUserDto); } @Delete(':id') remove(@Param('id') id: string): Promise<void> { return this.userService.remove(+id); } } ``` 这段文字说明了 RESTful API 设计模式下常见的几种操作及其对应的路由处理器函数实现。 #### 设置连接池选项 TypeORM 默认已经提供了内置的支持以优化多并发场景下的性能表现。如果想要进一步调整这些行为,则可以在 `forRoot()` 方法内部指定额外属性如 `poolSize`, `maxQueryExecutionTime` 等等[^4]: ```typescript { ... poolSize: 10, // 可选,默认值为 undefined 表示不限定大小 maxQueryExecutionTime: 10 * 1000, // 单位毫秒;超过该时间未响应则抛出异常 ... } ``` 以上内容解释了有关于持久化机制以及对象关系映射工具的工作原理和优势所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值