一、Node.js DM 数据库驱动版本介绍
分为新版本和老版本。其中老版本驱动包在达梦安装路径下的dmdbms\drivers\node.js文件夹中,包含以下三个版本:
那么如何选择合适的版本,可以在node.js交互式解释器中输入:
>process.platform
>process.arch
>process.versions.modules
依次得到操作系统平台、位数、node.js的ABI版本信息,根据以上信息得到对应版本的驱动。
达梦数据库安装包中没有提供新版本的驱动包,而是需要使用命令自动下载安装,本文后续会介绍安装方法。
目前老版本的驱动已经不进行运维。所以建议大家使用新版本驱动。新版本的驱动要求node语言版本要升级到至少v12。
二、基础环境准备
1.安装python,本文以python2.7为例。
首先到对应官网上下载2.7的安装包,安装。建议路径为英文,不要包含中文字符。我本地是安装到了C盘,安装后如下图。
将安装路径配置到环境变量中,在PATH中添加:
C:\Python27\
C:\Python27\python.exe
2.安装node,本文以nodev12为例。
node官网下载安装包(32位或者64位),根据自己的环境下载不同类型的安装包。
默认安装即可,安装后如下图:
安装好后可以用node -v查看一下node版本,正常输出版本就是安装成功。
再查看下npm的版本,npm -v
将安装路径配置到环境变量中,在PATH中添加:
E:\node-v12.2.0-win-x64\
C:\Users\AppData\Roaming\npm
三、安装驱动
由于新老版本驱动的安装步骤以及所需要的环境有差距,所以分开介绍。
老版本驱动:
老版本主要用于nodev12以下的版本,所以需要将本地的node版本降下来,安装nodev10,并将环境变量里面的地址修改为v10的路径即可。
1.安装 oracledb 模块
npm i nstall oracledb@3.1.0
由于 DM 已实现符合 OCI 接口标准的 DCI ,故可以向开发人员提供向 Oracle 兼容的 Node.js 接口。所以需要先安装oracledb
2.在达梦安装路径下的dmdbms\drivers\node.js文件夹中,选择适合本地环境的版本,用该文件夹下的oracledb.node 动态链接库,覆盖 1 中安装的oracledb 模块 build/Release 下的 oracledb.node
3 .配置环境变量 (dmoci 动态链接库位置)
假设 DM 安装目录为 /home/dmdbms (Linux 平台 或 C: dmdbms (Windows 平台 。 Linux平台下需配置环境变量 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmdbms/bin 。
Windows 平台下需将配置环境变量 PATH=%PATH%;C: dmdbms bin
新版本驱动:
Node.js DM 数据库驱动为达梦公司根据达梦数据库的特点, 为node.js开发提供的一套 DM Node.js 数据库驱动接口。包名为dmdb
使用命令安装dmdb包,安装时会自动下载一些依赖包,例如iconvlite 、 snappy。但是我本地下载的时候发生了报错,原因是本地没有安装node-gyp。所以建议先安装node-gyp。
$ npm install -g node-gyp
参考资料:https://www.npmjs.com/package/node-gyp
安装node-gyp过程中本人走过的几个坑,列出来仅供参考。
- python版本问题
由于我本地安装过python2.7和python3.8,node-gyp网站上介绍支持v2.7-v3.9,所以第一次安装时我没有指定版本v2.7,而是用的v3.8。导致安装node-gyp时,发生js编译报错。指定v2.7版本后,正常。
执行 npm config set python C:\Python27\ ,选择npm的python版本。
- 安装microsoft visual studio
node-gyp要求安装microsoft visual studio工具,我本地第一次安装microsoft visual studio版本为官网介绍的2017版。安装后发现,在后续安装dmdb驱动时发生报错:
在尝试了网上介绍的几种方法,重新安装npm,node-gyp,刷新等都不好用的情况下,考虑到我本地的node和python版本都比较低,是否有可能是版本的问题,所以我将microsoft visual studio版本降到了2015版。执行成功。
执行 npm config set msvs_version 2015,选择版本。
node-gyp搭建成功后,即可安装dmdb驱动。
npm install dmdb
安装成功后,可以正常进行测试。下面提供一个测试样例dmTest2.js:
//'use strict';
//const odbc = require('oracledb');
const db = require("dmdb");
let pool = null;
class dmTest {
constructor() {
this.pool = null;
this.config = {
connectString: "dm://user:password@127.0.0.1:5236?autoCommit=true",
poolMax: 10,
poolMin: 1
}
}
async execute() {
let conn = null;
try {
if (!this.pool) {
this.pool = await db.createPool(this.config)
}
conn = await this.pool.getConnection();
conn.execute(
"select name, id from sysobjects where name = :na",{na:{val:'SYSDBA',dir:db.BIND_IN}},{resultSet: false},
function(err, result) {
console.log('result1', result);
}
)
conn.execute(
"insert into login_logs(id) values(:na)",{na:{val:'5135',dir:db.BIND_IN}},{resultSet: true},
function(err, result) {
console.log('result2', result);
}
)
} catch (e) {
console.log('execute', e);
return 0;
} finally {
if (conn) {
try {
conn.close(function (e) {console.log('excute conn close')});
} catch (e) {
console.log('conn close err1', e);
}
}
}
}
async closePool() {
try {
this.pool.close();
} catch (e) {
console.log('closePoll err3', e);
}
}
}
let test = async function(){
let dt = new dmTest();
let thisVal = await dt.execute();
}
test();
//保持进程运行,便于查看数据库会话状态
setInterval(function(){
console.log('保持进程不退出');
},10000)
执行成功并输出
最后整理一下各路径和版本:
E:\node-v12.2.0-win-x64>cnpm -v
cnpm@6.1.1 (E:\node-v12.2.0-win-x64\node_modules\cnpm\lib\parse_argv.js)
npm@6.14.11 (E:\node-v12.2.0-win-x64\node_modules\cnpm\node_modules\npm\lib\npm.js)
node@12.2.0 (E:\node-v12.2.0-win-x64\node.exe)
npminstall@3.28.0 (E:\node-v12.2.0-win-x64\node_modules\cnpm\node_modules\npminstall\lib\index.js)
prefix=E:\node-v12.2.0-win-x64
win32 x64 10.0.19041
Visual Studio 15
registry=https://r.npm.taobao.org