博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决Error: NJS-045错误 ubuntu环境配置Nodejs访问Oracle
阅读量:7125 次
发布时间:2019-06-28

本文共 3529 字,大约阅读时间需要 11 分钟。

解决Error: NJS-045错误 ubuntu环境配置Nodejs访问Oracle

最近在公司鼓捣一个小型项目,技术栈选用了Vue2.0+Nodejs+Express+Mongodb+linux,需要访问的数据在公司生产库里面,生产库使用的是Oracle。直接访问生产库获取数据太危险,所以需要定时从Oracle生产库中抽取加工后的数据然后写入到Mongodb中。nodejs操作Oracle数据库这件事想想就觉得一定是闲人才这么干,一番搜索后在github发现了居然有Oracle官方维护的模块oracledb,参考官方文档步骤配置后始终提示:

NJS-045: cannot load the oracledb add-on binary for Node.js or DPI-1047: Oracle Client library cannot be loaded, then review any messages and the installation instructions.

一路爬坑终于配置成功,这里还是要小小吐槽一下node-oracledb官方文档对这个NJS-045错误的描述和帮助信息有些不友好,配置过程中如果缺少依赖会提示NJS-045,环境变量配置配置文件未初始化会提示NJS-045,nodejs和Oracle Instant Client运行环境冲突也是提示NJS-045,服!。但仔细留意在官方文档中有这么一句话:

Instant Client on Windows requires an appropriate Visual Studio Redistributable. On Linux, the libaio (sometimes called libaio1) package is needed.

很多朋友碰到NJS-045错误应该是没安装libaio依赖,这里将成功安装过程记录如下:

0.运行环境

OS: ubuntu desktop 16.04LTS

Nodejs: 8.10.0
Oracle db: Oracle Instant Client-12.2.0.1.0
gcc:(Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0
官方文档:
网络博客:

1.安装gcc编译器套件

gcc版本建议在5.0以上,ubuntu deskptop安装后会自带编译器套件,使用gcc --version查看:

图片描述

2.安装Nodejs并设置环境变量

设置环境变量

vi /etc/profile
编辑文件内容如下:
export NODEHOME=/opt/node-v8.10.0-linux-x64
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$NODEHOME/bin
vi保存退出
初始化profile文件
source /etc/profile

3.安装Oracle Instant Client

Oracle官网下载以下两个压缩包

instantclient-basic-linux.x64-12.2.0.1.0.zip
instantclient-sdk-linux.x64-12.2.0.1.0.zip
文件解压后两个文件夹没有重名的文件所以可直接合并
将压缩包拷贝到/opt/oracle中解压

cd /opt/oracleunzip instantclient-basic-linux.x64-12.2.0.1.0.zipunzip instantclient-sdk-linux.x64-12.2.0.1.0.zipmv instantclient_12_2 instantclientcd instantclientln -s libclntsh.so.12.1 libclntsh.so

设置环境变量

vi /etc/profile
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH
export OCI_LIB_DIR=/opt/oracle/instantclient
export OCI_INC_DIR=/opt/oracle/instantclient/sdk/include
图片描述

vi保存退出

初始化配置文件
source /etc/profile

4.安装oracledb

在opt目录下新建oracletest目录并安装oracledb

mkdir oracletest
cd oracletest
sudo cnpm install oracledb
这里建议使用cnpm,npm安装会出现错误。

5.编写js文件访问数据库

在/opt/oracletest中新建一个测试的demo.js文件,用于访问oracle数据库。

var oracledb = require('oracledb');var config = {  user:'mytest', //访问数据的账号  password:'password', //访问数据库的密码  connectString : "192.168.0.107:1521/orcl" //数据库的ip地址和端口号,orcl是数据库中配置的service_name的值};oracledb.getConnection(  config,  function(err, connection)  {    if (err) {      console.error(err.message);      return;    }    connection.execute("SELECT * from temp where rownum<5",      function(err, result)      {        if (err) {          console.error(err.message);          doRelease(connection);          return;        }        //打印返回的表结构        console.log(result.metaData);        //打印返回的行数据        console.log(result.rows);          });  });function doRelease(connection){  connection.close(    function(err) {      if (err) {        console.error(err.message);      }    });}

上面示例中返回的Oracle数据库查询结果是一个数组,官方有异步执行返回Object对象的示例,参考这个:

小心翼翼地编辑完demo.js文件然后保存,夹紧蛋蛋,满心欢喜地执行 node demo.js

图片描述

图片描述

6.关于NJS-045报错的解决办法

1.检查是否安装libaio1库,libaio1是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。缺少这个库会提示NJS-045错误。

sudo apt-get install libaio1
2.检查环境变量设置是否生效,环境变量设置后必须执行source /etc/profile初始化配置文件
3.检查当前系统的nodejs的环境变量是否配置到/etc/profile文件中
export NODEHOME=/opt/node-v8.10.0-linux-x64
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$NODEHOME/bin
同样修改后必须执行source /etc/profile初始化配置文件
4.检查/opt/oracle目录是否有读写权限,使用sudo chmod -R 777 提升权限
5.检查/opt/oracletest目录是否有读写权限,使用sudo chmod -R 777 提升权限
6.再次执行node demo.js

7.其他可能会遇到的错误

ORA-24454: client host name is not set

配置hosts文件解决
sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"

转载地址:http://hseel.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
history用法详解
查看>>
win7 下java开发环境搭建
查看>>
更新yum源时出现的问题
查看>>
嵌入式C语言面试题
查看>>
【Powershell】【DNS】通过Powershell远程注册静态DNS
查看>>
IOSTAT命令
查看>>
【长文+图片】HP FC MSA2000服务器瘫痪数据恢复过程
查看>>
C到C++ 快速过度 B 函数重载
查看>>
每个程序员都会的 35 个 jQuery 小技巧
查看>>
假设检验基本概念及一个总体参数的检验
查看>>
linux--dns服务器
查看>>
php-ffmpeg 安装
查看>>
文件上传
查看>>
java web 接收发送json格式的数据
查看>>
Hbase里的排序和比较大小
查看>>
IE7中input元素相对父级元素错位
查看>>
django 处理POST请求时报403
查看>>
Nagios配置文件详解
查看>>