因项目ERP中需要做一个维修计划表,ERP中功能已经实现完成,但报表实现比较困难,所以采用node+vue做一个网页,提供打印报表功能。又因为ERP使用的是oracle数据库,所以有此文章
前提安装oracledb npm install oracledb
let oracle = require('oracledb');
oracle.autoCommit = true;//设置自动提交
//oracledb.outFormat = oracledb.OBJECT;//设置以json数组方式输出
try {
oracle.initOracleClient({libDir: 'C:\\instantclient_12_2'});
//oracle.initOracleClient({configDir: 'E:\\oracle\\instantclient_12_1'});
} catch (err) {
console.error('Whoops!');
console.error(err);
process.exit(1);
}//指定oracle客户端配置文件位置,主要是找对应的oci.dll
const base = (sql,sql_data,callback) =>{
//创建数据库连接
let config = {
user:'ifsapp',
password:'ifsapp',
connectString:'172.16.66.224:1521/prod'
}
debugger
//处理数据库请求
oracle.getConnection(config,function(err,connection){
if(err){
console.log(err.message);
doRelease(connection);
return;
}else{
connection.execute(sql,sql_data,function(err,result){
if(err){
console.log(err)
doRelease(connection);
return;
}else{
oracle.autoCommit = true;
callback(result);
doRelease(connection);
}
})
}
})
}
// 关闭连接
function doRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
};
module.exports = base;
module.exports = (app) => {
const base = require('../oracle_connect.js')
app.post('/successFile',(req,res)=>{
function up_file(sql,sql_data){
base(sql,sql_data,(result)=>{
res.send(result);
})
}
let sql = ' BEGIN Doc_Title_API.Create_Doc_For_App_01 (:file_path,:lu,:key_no,:doc_class,:file_name,:kk); END;'
let the_data = req.body;
if(the_data.lu == 'SubContract'){
let key_no = 'SUB_CON_NO='+the_data.sub_con_n+'^';
let sql_data = ['',the_data.lu,key_no,the_data.doc_class,the_data.file_name,''];
up_file(sql,sql_data);
}else if(the_data.lu == 'SubConCallOff'){
let key_no = 'CALL_OFF_SEQ='+the_data.key_no1+'^'+'SUB_CON_NO='+the_data.sub_con_no+'^';
let sql_data = ['',the_data.lu,key_no,the_data.doc_class,the_data.file_name,''];
up_file(sql,sql_data);
}
})
// 查询每日车次对应的工作内容
app.post('/car',(req,res)=>{
let data = req.body;
let sql = 'select distinct key_car_no from C_SHI_END_PLAN_WORK where substr(key_date,1,6) = :title';
let sql_data = [data.title];
base(sql,sql_data,(result)=>{
let cars = result.rows;/* [ [ '101' ], [ '102' ]] */ //如果第三行代码不屏蔽 输出 [ {wo_no:'101'},{wo_no:'102'} ]
get_arr2(data.title,cars,(get_data)=>{
//console.log(get_data);
res.send(get_data);
});
})
})
}
今天又遇到了问题 “Error: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found”
百度了半天没找到怎么解决,最后只能查看官方文档
node-oracledb官方文档
发现是因为我使用了可选的Oracle配置文件,如tnsnames.ora、sqlnet.ora,所以在编写node程序时需要指定Oracle配置文件,指定方式
let oracle = require('oracledb');
try {
//oracle.initOracleClient({libDir: 'C:\\instantclient_12_2'});
oracle.initOracleClient({configDir: 'E:\\oracle\\instantclient_12_1'});
} catch (err) {
console.error('Whoops!');
console.error(err);
process.exit(1);
}
代码更改后问题解决