對於一個Web API項目,數據庫是必不可少的,Nest與數據庫無關,容許您輕鬆地與任何SQL或NoSQL數據庫集成。根據您的偏好,您有許多可用的選項。本篇咱們講解集成MySQL數據庫,Nest提供了@nestjs/typeorm包,爲了開始使用它,咱們首先安裝所需的依賴項。mysql
1 安裝依賴sql
typeorm 對 mysql 數據庫版本有要求,須要5.6以上數據庫
npm install --save @nestjs/typeorm typeorm mysql
2 導入TypeOrmModulenpm
安裝完成後咱們在app.module導入TypeOrmModule,json
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文件,在測試過程當中,運行報錯,具體緣由沒有找到。app
synchronize字段表明是否自動將實體類同步到數據庫async
3 編寫功能模塊ide
咱們編寫一個模塊來測試。新建message文件夾,文件夾下有下面幾個文件工具
message.entity.tspost
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) {} }
運行項目,用數據庫管理工具鏈接咱們的數據庫,能夠發現,已經自動建立表,咱們隨便加一條測試數據
咱們用postman測試,能夠返回咱們加的測試數據