【Nest教程】连接MySQL数据库

举报
青年码农 发表于 2022/08/25 00:31:53 2022/08/25
4.1k+ 0 0
【摘要】 对于一个Web API项目,数据库是必不可少的,Nest与数据库无关,允许您轻松地与任何SQL或NoSQL数据库集成。根据您的偏好,您有许多可用的选项。本篇我们讲解集成MySQL数据库,Nest提供了@nestjs/typeorm包,为了开始使用它,我们首先安装所需的依赖项。 1 安装依赖 typeorm 对 mys...

对于一个Web API项目,数据库是必不可少的,Nest与数据库无关,允许您轻松地与任何SQL或NoSQL数据库集成。根据您的偏好,您有许多可用的选项。本篇我们讲解集成MySQL数据库,Nest提供了@nestjs/typeorm包,为了开始使用它,我们首先安装所需的依赖项。

1 安装依赖

typeorm 对 mysql 数据库版本有要求,需要5.6以上

npm install --save @nestjs/typeorm typeorm mysql
  

2 导入TypeOrmModule

安装完成后我们在app.module导入TypeOrmModule,


       import { Module } from '@nestjs/common';
       import { AppController } from './app.controller';
       import { AppService } from './app.service';
       // 引入数据库的及配置文件
       import { TypeOrmModule } from '@nestjs/typeorm';
       import { Connection } from 'typeorm';
       @Module({
         imports: [
           TypeOrmModule.forRoot({
             type: 'mysql',
             host: '127.0.0.1',
             port: 3306,
             username: 'root',
             password: 'root',
             database: 'test',
             entities: [__dirname + '/**/*.entity{.ts,.js}'],
             synchronize: true,
           })
         ],
         controllers: [AppController],
         providers: [AppService],
       })
       export class AppModule {
         constructor(private readonly connection: Connection) {}
       }
   
  

forRoot()方法接受与来自TypeORM包的createConnection()相同的配置对象。另外,我们可以创建ormconfig.json,这种方式创建的json文件,在测试过程中,运行报错,具体原因没有找到。

synchronize字段代表是否自动将实体类同步到数据库

3 编写功能模块

我们编写一个模块来测试。新建message文件夹,文件夹下有下面几个文件

message.entity.ts


       import { Column, Entity, PrimaryGeneratedColumn, BaseEntity } from 'typeorm';
       // 这里可以修改表名
       @Entity()
       export class Message extends BaseEntity {
         @PrimaryGeneratedColumn()
         id: number;
         @Column('int', { name: 'user_id' })
         userId: number;
         @Column('text', { name: 'content' })
         content: string;
         @Column('int', { name: 'to_user_id' })
         toUserId: number;
         @Column('datetime', { name: 'created_time' })
         createdTime: Date;
         @Column('int')
         creator: number;
         @Column('datetime', { name: 'updated_time' })
         updatedTime: Date;
         @Column('int')
         updator: number;
       }
   
  

messages.service.ts


       import { Injectable } from '@nestjs/common';
       // import { Message } from './interfaces/message.interface';
       // ORM
       import { InjectRepository } from '@nestjs/typeorm';
       import { Repository } from 'typeorm';
       import { Message } from './message.entity';
       @Injectable()
       export class MessagesService {
         constructor(
           @InjectRepository(Message)
           private readonly messagesRepository: Repository<Message>,
         ) {}
         private readonly messages: Message[] = [];
         async findAll(): Promise<Message[]> {
           return await this.messagesRepository.find();
         }
       }
   
  

messages.module.ts


       import { Module } from '@nestjs/common';
       import { MessagesService } from './messages.service';
       import { MessagesController } from './messages.controller';
       import { TypeOrmModule } from '@nestjs/typeorm';
       import { Message } from './message.entity';
       @Module({
         imports: [TypeOrmModule.forFeature([Message])],
         providers: [MessagesService],
         controllers: [MessagesController],
       })
       export class MessagesModule {}
   
  

messages.controller.ts


       import { Controller, Post } from '@nestjs/common';
       import { MessagesService } from './messages.service';
       import { Message } from './message.entity';
       @Controller('messages')
       export class MessagesController {
         constructor(private readonly messagesService: MessagesService) {}
         @Post()
         findAll(): Promise<Message[]> {
           return this.messagesService.findAll();
         }
       }
   
  

4 导入及运行

app.module.ts文件导入


       // messages
       import { MessagesModule } from './messages/messages.module';
       @Module({
         imports: [
           TypeOrmModule.forRoot({
             type: 'mysql',
             host: '94.191.51.170',
             port: 3306,
             username: 'wangcong#2020',
             password: 'wangcong#2020',
             database: 'blog',
             entities: [__dirname + '/**/*.entity{.ts,.js}'],
             synchronize: true,
           }),
           MessagesModule,
         ],
         controllers: [AppController],
         providers: [AppService],
       })
       export class AppModule {
         constructor(private readonly connection: Connection) {}
       }
   
  

运行项目,用数据库管理工具连接我们的数据库,可以发现,已经自动创建表,我们随便加一条测试数据

3ca1eecf88b5164be17182998fd88fde.png

我们用postman测试,可以返回我们加的测试数据。

2cd34e9b1bf5759ffd743d6a3c27fcb9.png

文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/NMGWAP/article/details/125066987

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。