【Nest教程】连接MySQL数据库
对于一个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) {}
-
}
运行项目,用数据库管理工具连接我们的数据库,可以发现,已经自动创建表,我们随便加一条测试数据
我们用postman测试,可以返回我们加的测试数据。
文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/NMGWAP/article/details/125066987
- 点赞
- 收藏
- 关注作者
评论(0)