首页 小组 问答 话题 好文 素材 用户 唠叨 我的社区

[分享]NestJS + TypeORM:动态创建表并查询数据

道亮_(:з」∠)_Lv.1管理员
2024-08-17 18:26:13
0
50

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 项目中实现动态创建表和查询的功能。动态创建表和查询在某些场景下是非常有用的,例如,当您需要根据用户输入来创建和查询数据表时,或当您需要在运行时根据某些条件来创建和查询数据表时。

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

道亮_(:з」∠)_
道亮_(:з」∠)_

66 天前

签名 : 不交僧道,便是好人。   50       0
评论
站长交流