对于一个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';// ORMimport { 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文件导入

// messagesimport { 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测试,可以返回我们加的测试数据

©著作权归作者所有:来自51CTO博客作者mb5fd86dae5fbf6的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 数据库CURD常用操作-select查询-预处理
  2. C#数据库操作类
  3. PHP基础: 命名空间的引入方式和自动加载类、附加:mysql的一些基
  4. 命名空间类三种引用、类导入命名冲突解决、自动加载类、mysql操
  5. 命名空间类名三种引用-命名冲突解决-自动加载-数据库操作
  6. 配置文件中的数据库连接串加密了,你以为我就挖不出来吗?
  7. Python操作三大主流数据库
  8. 谷歌也翻车了?全球数亿安卓设备难逃一“劫”,用户隐私数据库被利用
  9. 工商银行 MySQL 数据库架构解密

随机推荐

  1. 各位大虾,快救救我,我的sql server7为什么
  2. Mysql的一些纪要
  3. oracle ebs r12报告的Oracle flex值层次
  4. Sql server创建存储过程
  5. 利用纯真IP库建立mysql ip数据库
  6. SQL根据某个字段分组查询:
  7. 特殊符号对应的ASCII码
  8. java.util.Date与java.sql.Date
  9. java之生成可重复执行的sql脚本
  10. Mysql-5.7 x64安装