typeorm动态连接操作不同数据库(nestjs)

343 阅读1分钟

需求: 前端输入任意数据库连接参数,切换不同数据库请求数据!

controller文件 接收前端传来的配置信息


@Post('test')
  testCreate(@Body() body: any ) {
    return this.appService.testCreate(body);
  }

service文件 路由处理函数进行配置

import { DataSource } from 'typeorm';
import { allEntities } from 'ormconfig';

async testCreate(body){
    const { type, host, port, username, password, database } = body
    const AppDataSource = new DataSource({
      type,
      host,
      port,
      username,
      password,
      database,
      // 此处必须引入实体entities, 且需要注意路径
      entities: allEntities,
  })
  try {
    
    await AppDataSource.initialize()
    //  这里 可以对整个数据库进行查询
    //  ①原始查询 const rawData = await AppDataSource.query(`show tables`)
    //     return rawData
    //  ②manager查询 const res = await AppDataSource.manager.find(User)
    //  return res
   // ③ const usersRepository =  AppDataSource.getRepository(Users)
   // const allUsers = await usersRepository.find()
  //  console.log('🚀 ~ file: app.service.ts:39 ~ AppService ~ testCreate ~ allUsers:', allUsers)
  } catch (error) {
    // console.log('🚀 ~ file: app.service.ts:26 ~ AppService ~ testCreate ~ error:', error)
    return error.sqlMessage
  }finally{
    await AppDataSource.destroy()
  }