【问题标题】:ConnectionNotFoundError: Connection "default" was not foundConnectionNotFoundError:未找到连接“默认”
【发布时间】:2021-02-02 13:43:53
【问题描述】:

堆栈 => Nodejs、Express.js、Typeorm

我正在尝试将 typeorm 与打字稿一起使用。我创建了一个存储库来保存幸存者信息。但我不断收到此错误:

ConnectionNotFoundError: Connection "default" was not found.
    at new ConnectionNotFoundError (/Users/Wblech/codeminerTeste/backend/src/error/ConnectionNotFoundError.ts:8:9)
    at ConnectionManager.get (/Users/Wblech/codeminerTeste/backend/src/connection/ConnectionManager.ts:40:19)
    at Object.getRepository (/Users/Wblech/codeminerTeste/backend/src/index.ts:284:35)
    at new CreateSurvivorRepository (/Users/Wblech/codeminerTeste/backend/src/repositories/typeorm/CreateSurvivorRepository.ts:10:26)
    at Object.<anonymous> (/Users/Wblech/codeminerTeste/backend/src/useCases/CreateSurvivor/index.ts:6:41)
    at Module._compile (internal/modules/cjs/loader.js:774:30)
    at Module._compile (/Users/Wblech/codeminerTeste/backend/node_modules/source-map-support/source-map-support.js:547:25)
    at Module.m._compile (/private/var/folders/fr/6x3p83cj6r73h57k1_x6nctc0000gn/T/ts-node-dev-hook-7748782675459163.js:69:33)
    at Module._extensions..js (internal/modules/cjs/loader.js:785:10)
    at require.extensions..jsx.require.extensions..js (/private/var/folders/fr/6x3p83cj6r73h57k1_x6nctc0000gn/T/ts-node-dev-hook-7748782675459163.js:114:20)
[ERROR] 00:28:59 ConnectionNotFoundError: Connection "default" was not found.

我的 ormconfig.json 就是这个:

{
  "name": "default",
  "type": "postgres",
  "host": "localhost",
  "port": 5432,
  "username": "postgres",
  "password": "teste",
  "database": "codeminer_backend",
  "entities": [
     "src/database/models/*.ts"
  ],
  "migrations": [
     "src/database/migrations/*.ts"
  ],
  "cli": {
    "migrationsDir": "./src/database/migrations"
  }
}

这些是错误指定的代码:

at new CreateSurvivorRepository (/Users/Wblech/codeminerTeste/backend/src/repositories/typeorm/CreateSurvivorRepository.ts:10:26)

import { getRepository, Repository } from 'typeorm'
import { SurvivorOrm } from '../../database/models/SurvivorsOrm'
import { ICreateSurvivorRequestDTO } from '../../useCases/CreateSurvivor/CreateSurvivorDTO'
import { ICreateSurvivorRepository } from '../ICreateSurvivorRepository'

export class CreateSurvivorRepository implements ICreateSurvivorRepository {
  private ormRepository: Repository<SurvivorOrm>

  constructor () {
    this.ormRepository = getRepository(SurvivorOrm)
  }

  public async create ({ id, name, age, gender, lastLocation, infected }: ICreateSurvivorRequestDTO): Promise<SurvivorOrm> {
    const survivor = await this.ormRepository.create({ id, name, age, gender, lastLocation, infected })

    await this.ormRepository.save(survivor)

    return survivor
  }
}

at Object.&lt;anonymous&gt; (/Users/Wblech/codeminerTeste/backend/src/useCases/CreateSurvivor/index.ts:6:41)

import { CreateInventoryRepository } from '../../repositories/typeorm/CreateInventoryRepository'
import { CreateSurvivorRepository } from '../../repositories/typeorm/CreateSurvivorRepository'
import { CreateSurvivorController } from './CreateSurvivorController'
import { CreateSurvivorUseCase } from './CreateSurvivorUseCase'

const createSurvivorRepositoryTypeOrm = new CreateSurvivorRepository()
const createInventoryRepositoryTypeOrm = new CreateInventoryRepository()

const createSurvivorUseCase = new CreateSurvivorUseCase(
  createSurvivorRepositoryTypeOrm,
  createInventoryRepositoryTypeOrm
)

const createSurvivorController = new CreateSurvivorController(
  createSurvivorUseCase
)

export { createSurvivorUseCase, createSurvivorController }

我的连接在路径“./src/database/index.ts”的一个文件中,是这个:

import { createConnection } from 'typeorm'

createConnection()

我在这个名为 server.ts 的文件中导入连接:

import express from 'express'
import { router } from './router'
import './database'

const port = 8081

const app = express()

app.use(express.json())
app.use(router)

app.listen(port, () => console.log(`App running at ${port}`))

我真的被困在这个问题上

【问题讨论】:

    标签: javascript typescript typeorm clean-architecture


    【解决方案1】:

    基本上——TypeORM 尝试获取 "default" 连接选项,但如果未找到则抛​​出错误:

    ConnectionNotFoundError:未找到连接“默认”。

    我们可以通过在建立连接之前进行某种健全性检查来解决这个问题 - 幸运的是,我们在 getConnectionManager() 上有 .has() 方法。

    import { Connection, getConnectionManager, getConnectionOptions, 
      createConnection, getConnection, QueryRunner } from 'typeorm';
        
        async init() {
        let connection: Connection;
        let queryRunner: QueryRunner;
    
         if (!getConnectionManager().has('default')) {
            const connectionOptions = await getConnectionOptions();
            connection = await createConnection(connectionOptions);
          } else {
            connection = getConnection();
          }
    
        queryRunner = connection.createQueryRunner(); 
     }
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 2020-02-13
      • 2020-12-03
      • 2018-09-22
      • 2019-09-08
      • 2020-04-25
      • 2021-08-03
      • 1970-01-01
      相关资源
      最近更新 更多