掌握数据库操作诀窍,轻松构建Nest.js+TypeORM API
2023-12-14 21:32:22
一、环境搭建
在开始之前,请确保您已经安装了 Node.js 和 npm。您还可以使用 Yarn 作为包管理器,但本文将使用 npm 进行演示。
npm install -g nestjs
nest new my-project
cd my-project
npm install typeorm
npm install pg
二、创建实体模型
实体模型是 TypeOrm 的核心概念之一,它代表了数据库中的一个表。实体模型包含了表中的字段、数据类型、主键和外键等信息。
npm install @nestjs/typeorm
在 src/entities
目录下创建一个名为 Stock.ts
的文件,并添加以下代码:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class Stock {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
price: number;
}
三、配置 TypeOrm
在 src/typeorm.config.ts
文件中,添加以下代码:
import { TypeOrmModule } from '@nestjs/typeorm';
import { Stock } from './entities/Stock.ts';
export const TypeOrmConfig = TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'password',
database: 'my_database',
entities: [Stock],
synchronize: true,
});
四、使用 TypeOrm
在 src/app.module.ts
文件中,导入 TypeOrmModule
并将其添加到 imports
数组中。
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { Stock } from './entities/Stock.ts';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'password',
database: 'my_database',
entities: [Stock],
synchronize: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
五、运行项目
npm run start
现在,您已经成功地配置了 TypeOrm 并连接到了数据库。您可以使用 TypeOrm 来进行数据库操作,例如查询、插入、更新和删除。
六、查询数据
在 src/app.controller.ts
文件中,添加以下代码:
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
async getAllStocks(): Promise<Stock[]> {
return this.appService.getAllStocks();
}
}
在 src/app.service.ts
文件中,添加以下代码:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Stock } from './entities/Stock.ts';
@Injectable()
export class AppService {
constructor(
@InjectRepository(Stock)
private stockRepository: Repository<Stock>,
) {}
async getAllStocks(): Promise<Stock[]> {
return this.stockRepository.find();
}
}
现在,您可以通过访问 http://localhost:3000/
来获取所有股票信息。
七、插入数据
在 src/app.controller.ts
文件中,添加以下代码:
@Post()
async createStock(@Body() stock: Stock): Promise<Stock> {
return this.appService.createStock(stock);
}
在 src/app.service.ts
文件中,添加以下代码:
async createStock(stock: Stock): Promise<Stock> {
return this.stockRepository.save(stock);
}
现在,您可以通过向 http://localhost:3000/
发送 POST 请求来创建新的股票。
八、更新数据
在 src/app.controller.ts
文件中,添加以下代码:
@Put(':id')
async updateStock(@Param('id') id: number, @Body() stock: Stock): Promise<Stock> {
return this.appService.updateStock(id, stock);
}
在 src/app.service.ts
文件中,添加以下代码:
async updateStock(id: number, stock: Stock): Promise<Stock> {
const existingStock = await this.stockRepository.findOne(id);
if (existingStock) {
existingStock.name = stock.name;
existingStock.price = stock.price;
return this.stockRepository.save(existingStock);
}
return null;
}
现在,您可以通过向 http://localhost:3000/:id
发送 PUT 请求来更新现有股票信息。
九、删除数据
在 src/app.controller.ts
文件中,添加以下代码:
@Delete(':id')
async deleteStock(@Param('id') id: number): Promise<void> {
await this.appService.deleteStock(id);
}
在 src/app.service.ts
文件中,添加以下代码:
async deleteStock(id: number): Promise<void> {
await this.stockRepository.delete(id);
}
现在,您可以通过向 http://localhost:3000/:id
发送 DELETE 请求来删除现有股票。
结论
在本文中,我们介绍了如何在 Nest.js 项目中配置和初始化 TypeOrm,并演示了如何进行数据库查询、插入、更新和删除等常见操作。通过这些知识,您已经能够在 Nest.js 项目中使用 TypeOrm 来管理数据库。