返回

掌握数据库操作诀窍,轻松构建Nest.js+TypeORM API

前端

一、环境搭建

在开始之前,请确保您已经安装了 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 来管理数据库。