【Nest教程】鏈接MySQL數據庫

對於一個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) {}
}

運行項目,用數據庫管理工具鏈接咱們的數據庫,能夠發現,已經自動建立表,咱們隨便加一條測試數據

【Nest教程】鏈接MySQL數據庫

咱們用postman測試,能夠返回咱們加的測試數據

【Nest教程】鏈接MySQL數據庫

相關文章
相關標籤/搜索