Node.js 使用';节点oracledb';

Node.js 使用';节点oracledb';,node.js,oracle,Node.js,Oracle,因此,我正在尝试在我的节点应用程序中添加Oracle DB支持。我过去经常这样做 由于我已经在应用程序中使用MSSQL,我想实现一个“类似”的工作流来使用Oracle 现在,我使用一个类来实现使用承诺的方法,如下所示: class db { constructor(){ this._pool = null; } get_pool(){ //for MSSQL if (!this._pool) { thi

因此,我正在尝试在我的节点应用程序中添加Oracle DB支持。我过去经常这样做

由于我已经在应用程序中使用MSSQL,我想实现一个“类似”的工作流来使用Oracle

现在,我使用一个类来实现使用承诺的方法,如下所示:

class db {

    constructor(){
        this._pool = null;
    }

    get_pool(){
       //for MSSQL
       if (!this._pool) {
           this._pool = new mssql.ConnectionPool(sqlDbOptions);
       }

       //connect pool
       if (!this._pool.connected){
           return this._pool.connect();
       }
       else{
           return new Promise((resolve, reject) => {
               resolve(this._pool);
           })
       }
    }

    insert(sql){
        return this.get_pool().then((pool) => {...
        ....
        ....
    }
}
如您所见,从get_pool()获取池后,调用insert方法get将返回insert承诺(检查池是否已连接,如果未连接则连接)

我尝试对oracle使用相同的逻辑,从我在他们的承诺文档中读到的内容,在get_pool()中使用类似的内容:

这不起作用,因为出于某种原因,oracle.createPool(选项)也会返回一个承诺,我注意到这需要很多时间才能解决(不知道为什么,因为它没有连接)

你知道如何实现与我在MSSQL中使用的行为相同的行为吗

谢谢

看看我在“”上的文章,这是关于使用Node.js和Oracle数据库创建REST API的系列文章的一部分

我通常主张在启动和关闭代码中创建和关闭池。然后我使用这样的函数来简化不需要事务的简单执行:

function simpleExecute(statement, binds = [], opts = {}) {
  return new Promise(async (resolve, reject) => {
    let conn;

    opts.outFormat = oracledb.OBJECT;
    opts.autoCommit = true;

    try {
      conn = await oracledb.getConnection();

      const result = await conn.execute(statement, binds, opts);

      resolve(result);
    } catch (err) {
      reject(err);
    } finally {
      if (conn) { // conn assignment worked, need to close
        try {
          await conn.close();
        } catch (err) {
          console.log(err);
        }
      }
    }
  });
}
请注意,对于节点oracledb,当您调用oracledb.createPool时,将在此时创建到数据库的连接(这就是为什么它是一个异步操作)

此外,我们还有一个“”,它允许您在创建池时为池分配别名,并使用oracledb.getPool()检索它们,这是一种同步方法

在上面的示例中,由于对oracledb.getConnection()的调用没有传递任何参数,因此假定连接应该来自“默认”池,这是创建的第一个池。

请看我在“”上的文章,这是关于使用Node.js和Oracle数据库创建REST API的系列文章的一部分

我通常主张在启动和关闭代码中创建和关闭池。然后我使用这样的函数来简化不需要事务的简单执行:

function simpleExecute(statement, binds = [], opts = {}) {
  return new Promise(async (resolve, reject) => {
    let conn;

    opts.outFormat = oracledb.OBJECT;
    opts.autoCommit = true;

    try {
      conn = await oracledb.getConnection();

      const result = await conn.execute(statement, binds, opts);

      resolve(result);
    } catch (err) {
      reject(err);
    } finally {
      if (conn) { // conn assignment worked, need to close
        try {
          await conn.close();
        } catch (err) {
          console.log(err);
        }
      }
    }
  });
}
请注意,对于节点oracledb,当您调用oracledb.createPool时,将在此时创建到数据库的连接(这就是为什么它是一个异步操作)

此外,我们还有一个“”,它允许您在创建池时为池分配别名,并使用oracledb.getPool()检索它们,这是一种同步方法


在上面的示例中,由于对oracledb.getConnection()的调用没有传递任何参数,因此假定连接应该来自“默认”池,这是创建的第一个池。

我有类似的代码行。但我面临一些问题。你能帮我吗。我有类似的代码行。但我面临一些问题。你能帮我吗。