【Nest教程】连接MySQL数据库

举报
青年码农 发表于 2022/08/25 00:31:53 2022/08/25
【摘要】 对于一个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,


   
  1. import { Module } from '@nestjs/common';
  2. import { AppController } from './app.controller';
  3. import { AppService } from './app.service';
  4. // 引入数据库的及配置文件
  5. import { TypeOrmModule } from '@nestjs/typeorm';
  6. import { Connection } from 'typeorm';
  7. @Module({
  8.   imports: [
  9.     TypeOrmModule.forRoot({
  10.       type'mysql',
  11.       host: '127.0.0.1',
  12.       port: 3306,
  13.       username: 'root',
  14.       password: 'root',
  15.       database: 'test',
  16.       entities: [__dirname + '/**/*.entity{.ts,.js}'],
  17.       synchronize: true,
  18.     })
  19.   ],
  20.   controllers: [AppController],
  21.   providers: [AppService],
  22. })
  23. export class AppModule {
  24.   constructor(private readonly connection: Connection) {}
  25. }

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

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

3 编写功能模块

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

message.entity.ts


   
  1. import { Column, Entity, PrimaryGeneratedColumn, BaseEntity } from 'typeorm';
  2. // 这里可以修改表名
  3. @Entity()
  4. export class Message extends BaseEntity {
  5.   @PrimaryGeneratedColumn()
  6.   id: number;
  7.   @Column('int', { name: 'user_id' })
  8.   userId: number;
  9.   @Column('text', { name: 'content' })
  10.   content: string;
  11.   @Column('int', { name: 'to_user_id' })
  12.   toUserId: number;
  13.   @Column('datetime', { name: 'created_time' })
  14.   createdTime: Date;
  15.   @Column('int')
  16.   creator: number;
  17.   @Column('datetime', { name: 'updated_time' })
  18.   updatedTime: Date;
  19.   @Column('int')
  20.   updator: number;
  21. }

messages.service.ts


   
  1. import { Injectable } from '@nestjs/common';
  2. // import { Message } from './interfaces/message.interface';
  3. // ORM
  4. import { InjectRepository } from '@nestjs/typeorm';
  5. import { Repository } from 'typeorm';
  6. import { Message } from './message.entity';
  7. @Injectable()
  8. export class MessagesService {
  9.   constructor(
  10.     @InjectRepository(Message)
  11.     private readonly messagesRepository: Repository<Message>,
  12.   ) {}
  13.   private readonly messages: Message[] = [];
  14.   async findAll(): Promise<Message[]> {
  15.     return await this.messagesRepository.find();
  16.   }
  17. }

messages.module.ts


   
  1. import { Module } from '@nestjs/common';
  2. import { MessagesService } from './messages.service';
  3. import { MessagesController } from './messages.controller';
  4. import { TypeOrmModule } from '@nestjs/typeorm';
  5. import { Message } from './message.entity';
  6. @Module({
  7.   imports: [TypeOrmModule.forFeature([Message])],
  8.   providers: [MessagesService],
  9.   controllers: [MessagesController],
  10. })
  11. export class MessagesModule {}

messages.controller.ts


   
  1. import { Controller, Post } from '@nestjs/common';
  2. import { MessagesService } from './messages.service';
  3. import { Message } from './message.entity';
  4. @Controller('messages')
  5. export class MessagesController {
  6.   constructor(private readonly messagesService: MessagesService) {}
  7.   @Post()
  8.   findAll(): Promise<Message[]> {
  9.     return this.messagesService.findAll();
  10.   }
  11. }

4 导入及运行

app.module.ts文件导入


   
  1. // messages
  2. import { MessagesModule } from './messages/messages.module';
  3. @Module({
  4.   imports: [
  5.     TypeOrmModule.forRoot({
  6.       type'mysql',
  7.       host: '94.191.51.170',
  8.       port: 3306,
  9.       username: 'wangcong#2020',
  10.       password: 'wangcong#2020',
  11.       database: 'blog',
  12.       entities: [__dirname + '/**/*.entity{.ts,.js}'],
  13.       synchronize: true,
  14.     }),
  15.     MessagesModule,
  16.   ],
  17.   controllers: [AppController],
  18.   providers: [AppService],
  19. })
  20. export class AppModule {
  21.   constructor(private readonly connection: Connection) {}
  22. }

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

3ca1eecf88b5164be17182998fd88fde.png

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

2cd34e9b1bf5759ffd743d6a3c27fcb9.png

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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