0

我正在尝试使用 Loopback4 和 TypeORM 查询 Oracle 表,但我 ORA-00942:表或视图不存在。Morover,过了一会儿,我得到另一个像这样的错误:

'无法创建一个名为“默认”的新连接,因为具有该名称的连接已经存在,并且它现在有一个活动的连接会话。

我是 Loopback4 和 Nodejs - Typescript 的新手,所以我在控制器内部调用了 createConnection 方法。

也许我应该在某个集中的地方调用它,但我不知道在哪里以及如何将它集中在我的项目中。

这是我的实体

import { Entity, Column, PrimaryColumn, OneToOne } from "typeorm";

@Entity("Pratica")
export class Pratica {
  @PrimaryColumn()
  protocolloaci: number;

  @Column()
  codicepratica: string;

}

我的控制器方法

@get('/pratiche/{id}', {
    responses: {
      '200': {
        description: 'Pratica model instance',
        content: { 'application/json': { schema: getModelSchemaRef(Pratica) } },
      },
    },
  })
  async findById(@param.path.number('id') id: number): Promise<Pratica> {

   return new Promise((resolve) => {

      createConnection({
        type: 'oracle',
        host: '10.64.2.226',
        port: 1521,
        sid: 'npra02s.svidbs003std',
        username: 'sua03e',
        password: 'iniziale',
        entities: [
          Pratica
        ],
        logging: true
      }).then(async connection => {
        let praticaRepository = connection.getRepository(Pratica);
        const pratica = await praticaRepository.find({ protocolloaci: id });
        resolve(pratica[0]); // return using resolve
      }).catch(error => console.log(error));
    });

  }

谢谢你

4

1 回答 1

0

是否sua03e拥有您要查询的表?如果是,表名的大小写是否与数据库中的内容匹配(注意默认情况下 Oracle 大写名称)?

“默认”错误消息似乎不正确。错误是否以“NJS-NNN”为前缀?如果不是,则错误可能来自 Loopback 而不是驱动程序。

您已经放入createConnection了一个使用连接来完成工作的函数。我一般不建议这样做。最好在启动应用程序时执行的初始化逻辑中创建一个池。然后你只调用getConnection使用连接的函数内部的池。这既更高效也更易于维护。

即使您使用的是 Loopback,您也可能会受益于阅读和完成本系列关于使用 Node.js 和 Oracle 数据库创建 REST API:https ://jsao.io/2018/03/creating-a-rest-api -with-node-js-and-oracle-database/

于 2019-09-30T17:19:37.970 回答