Node.js 使用';节点oracledb';
因此,我正在尝试在我的节点应用程序中添加Oracle DB支持。我过去经常这样做 由于我已经在应用程序中使用MSSQL,我想实现一个“类似”的工作流来使用Oracle 现在,我使用一个类来实现使用承诺的方法,如下所示: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
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()的调用没有传递任何参数,因此假定连接应该来自“默认”池,这是创建的第一个池。我有类似的代码行。但我面临一些问题。你能帮我吗。我有类似的代码行。但我面临一些问题。你能帮我吗。