返回

NestJS + TypeORM:动态创建表并查询数据

前端

1. 安装依赖

首先,我们需要安装 NestJS 和 TypeORM 的相关依赖。

npm install --save @nestjs/core @nestjs/platform-express typeorm

2. 创建实体类

实体类是 TypeORM 中用来数据库表结构的类。在 NestJS 中,我们可以使用 @Entity() 装饰器来创建实体类。

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class DynamicTable {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  age: number;

}

3. 创建服务类

服务类是 NestJS 中用来处理业务逻辑的类。在 NestJS 中,我们可以使用 @Injectable() 装饰器来创建服务类。

import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';

@Injectable()
export class DynamicTableService {

  constructor(
    @InjectRepository(DynamicTable)
    private readonly dynamicTableRepository: Repository<DynamicTable>,
  ) {}

  async createTable(tableName: string) {
    const query = `CREATE TABLE ${tableName} (
      id INT NOT NULL AUTO_INCREMENT,
      name VARCHAR(255) NOT NULL,
      age INT NOT NULL,
      PRIMARY KEY (id)
    )`;
    await this.dynamicTableRepository.query(query);
  }

  async queryTable(tableName: string) {
    const query = `SELECT * FROM ${tableName}`;
    return await this.dynamicTableRepository.query(query);
  }

}

4. 创建控制器

控制器是 NestJS 中用来处理 HTTP 请求的类。在 NestJS 中,我们可以使用 @Controller() 装饰器来创建控制器。

import { Controller, Get, Post, Body, Param } from '@nestjs/common';
import { DynamicTableService } from './dynamic-table.service';

@Controller('dynamic-table')
export class DynamicTableController {

  constructor(
    private readonly dynamicTableService: DynamicTableService,
  ) {}

  @Post()
  async createTable(@Body('tableName') tableName: string) {
    await this.dynamicTableService.createTable(tableName);
    return {
      message: 'Table created successfully',
    };
  }

  @Get(':tableName')
  async queryTable(@Param('tableName') tableName: string) {
    const data = await this.dynamicTableService.queryTable(tableName);
    return {
      data,
    };
  }

}

5. 启动应用

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}

bootstrap();

现在,您可以使用 Postman 或其他 HTTP 请求工具来测试您的 API。

总结

在本文中,我们介绍了如何在 NestJS 项目中实现动态创建表和查询的功能。动态创建表和查询在某些场景下是非常有用的,例如,当您需要根据用户输入来创建和查询数据表时,或当您需要在运行时根据某些条件来创建和查询数据表时。

希望本文对您有所帮助。如果您有任何问题,请随时在评论区留言。