无法从linux环境连接oracle云自治数据库



我使用的是一个Node JS应用程序,它有Oracle自治数据库作为后端。它在我的本地机器上完美地工作,我能够很好地连接它,没有任何问题。我尝试在Linux服务器上部署Node JS项目到Azure WebAppService。

最初部署后,我的项目无法找到Oracle客户端,因此在搜索了很多之后,我能够通过以下

解决这个问题

步骤有了这个,我就可以解决客户端问题了。我有从oracle收到的钱包文件,我把它们放在admin文件夹

但现在的问题是,当我发出任何请求时,我都会得到这个错误

data:{"message":"db.doConnect is not a function","stack":"TypeError: 
db.doConnect is not a `functionn`
createPool() callback: ORA-28759: failure to open file

我的代码://包含所有外部依赖Const oracledb = require('oracledb');//初始化变量const numRows = 100;let respar = [];让connectionObject;async函数initialize(envName) {

await oracledb.createPool({
user: process.env.DATABASEUSERNAME,
password: process.env.DATABASEPASSWORD,
connectString: process.env.DATABASECONNECTIONSTRING,
});
}
async function close(poolAlias) {
await oracledb.getPool(poolAlias).close();
}
// Function to iterate through all the rows fetched in the result set and resturn the same
async function fetchRowsFromRS(connection, resultSet, numRows) {
// Get the rows
try {
const rows = await resultSet.getRows(numRows);
// no rows, or no more rows, then close the result set
if (rows.length === 0) {
console.log('No rows returned');
// doClose(connection, resultSet);
} else if (rows.length > 0) {
console.log(`Got ${rows.length} rows`);
respArr = respArr.concat(rows);
// Call the function recursively to get more rows
await fetchRowsFromRS(connection, resultSet, numRows);
}
// Return the rows
return respArr;
} catch (err) {
console.log(err);
}
}
async function simpleExecute(statement, binds = [], numberOutCur, poolAlias, opts = {}) {
try {
await initialize();
opts.outFormat = oracledb.OBJECT;
opts.autoCommit = true;


connectionObject = await oracledb.getConnection(poolAlias);
const finalResult = {};
const result = await connectionObject.execute(statement, binds, opts);
let promises = [];
for (let idx = 0; idx < numberOutCur; idx++) {
const refCurName = `ref_cur_${idx}`;
promises.push(fetchRowsFromRS(connectionObject, result.outBinds[refCurName], numRows));
const resultRows = await Promise.all(promises);
respArr = [];
finalResult[refCurName] = resultRows;
promises = [];
}
return finalResult;
// const values = await Promise.all(promises);
// return values;
} catch (error) {
return error;
} finally {
if (connectionObject) {
try {
await connectionObject.close();
} catch (err) {
console.log(err);
}
}
}
}
// Function to release the connection
function doRelease(connection) {
connection.close(
(err) => {
if (err) {
console.log(err.message);
}
},
);
}
// Function to close the result set connection
function doClose(connection, resultSet) {
resultSet.close(
(err) => {
if (err) { console.log(err.message); }
doRelease(connection);
},
);
}
// Export functions
module.exports.simpleExecute = simpleExecute;
module.exports.initialize = initialize;
module.exports.close = close;

我用这个

调用我的进程
const allProducts = await dbSvc.simpleExecute(query, cart_data_binds, 1, 
'default');

我对这条消息的理解是我无法连接到我的云数据库,我不知道如何解决这个问题,有人能帮助我吗?现在这个问题已经2周了。

在Node JS项目中,我使用simpleoracle库连接我的oracle云匿名数据库

谢谢Christopher Jones和saiharika213。把你的建议作为答案来帮助其他社区成员。

这个ORA-28759: failure to open file错误似乎你需要更新sqlnet.ora中的WALLET_LOCATION目录。您可以参考连接到Oracle云自治数据库

您可以通过将连接字符串更改为指向钱包位置来解决此错误。将钱包移动到各自的项目文件夹并修改连接字符串,如下dbConfig.js所示。提供从根目录到钱包文件夹的路径。

例如:

module.exports = {
user: username,
password:password,
connectString:"(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = Hostname )(PORT = XXXX))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = Servicename))(SECURITY=(MY_WALLET_DIRECTORY=/Users/yharika/Node_Projects/invoice_app/config/wallet)))"
}

你可以参考无法使用sqlnet从node js连接到oracle数据库。- ora-28759:打开文件失败

相关内容

  • 没有找到相关文章