前言
本章节主要介绍 JavaScript 应用开发常见问题,为用户提供 JavaScript 应用开发常见问题的分析和解决思路。除此之外,用户还可前往达梦技术社区参与更多问题讨论。
目录
- Npm 代理问题
- 安装 dmdb 时 network 相关报错
- Error: Cannot find module 'dmdb'
- Node.js 怎么连接达梦数据库
- node.js+electron 适配 DM 报错: ”Error: [6001] 网络通信错误异常"
正文
Npm 代理问题
【问题描述】
报错信息如下:
【问题解决】
使用淘宝镜像进行下载:
npm --registry https://registry.npm.taobao.org install dmdb
安装 dmdb 时 network 相关报错
【问题描述】
报错信息如下:
【问题解决】
设置 Properly :
npm config set registry https://registry.npm.taobao.org
Error: Cannot find module 'dmdb'
【问题描述】
报错信息如下:
【问题解决】
Linux/windows 环境:添加环境变量 NODE_PATH 。
Node.js 怎么连接达梦数据库
【问题解决】
具体的连接方式以及步骤,请参考 DM Node.js 编程指南 的基本示例章节 。
node.js+electron 适配 DM 报错: ”Error: [6001] 网络通信错误异常"
【问题描述】
使用新的 dm 驱动包执行 electron-rebuild 后,启动程序报错信息如下:
Error: [6001] 网络通信的异常 Error: [6071] 消息加密失败 Error: Unknown cipher at new n (D:\tool\electron-
quick-start\node_modules\dmdb\src\driver\error.js:28:19) at Function.n.ECJS_COMMUNICATION_ERROR
(D:\tool\electron-quick-start\node_modules\dmdb\src\driver\error.js:35:16) at e.<anonymous>
(D:\tool\electron-quick-start\node_modules\dmdb\src\driver\connection.js:466:91) at D:\tool\electron-quick-
start\node_modules\dmdb\src\driver\connection.js:108:27 at Object.throw (D:\tool\electron-quick-
start\node_modules\dmdb\src\driver\connection.js:119:14) at e (D:\tool\electron-quick-
start\node_modules\dmdb\src\driver\connection.js:31:26) at processTicksAndRejections
(internal/process/task_queues.js:97:5)
【问题分析】
node 使用的是 OpenSSL 密码库,而 Electron 使用的是 BoringSSL 密码库,可以通过 crypto.getCiphers() 查看 Electron 支持的加密算法。因为数据库连接串属性 loginEncrypt 默认是 true,与数据库通信会用特定加密算法加密消息(dm.ini 中的 COMM_ENCRYPT_NAME 控制具体使用的加密算法)。
【问题解决】
方法一:如果对加密要求不高或者开发环境,更改数据库连接串,加上 loginEncrypt=false,示例如下:
connectString:"dm://SYSDBA:*****@localhost:5236?autoCommit=false&loginEncrypt=false"
方法二:需要查看 electron 支持的加密算法和达梦数据库支持的加密算法(查看 V$CIPHERS 视图)具体步骤如下:
- 查看 electron 支持的加密算法,通过 crypto.getCiphers(),代码如下:
const crypto = require('crypto') const ciphers = crypto.getCiphers() console.log(ciphers)
- 可以将其加入到 js 代码开头,然后执行可以看到支持的加密算法。例如:
D:\tool\node_electron>npm start> node_electron@1.0.0 start D:\tool\node_electron > electron . [ 'aes-128-cbc', 'aes-128-cfb', 'aes-128-ctr', 'aes-128-ecb', 'aes-128-gcm', 'aes-128-ofb', 'aes-192-cbc', 'aes-192-ctr', 'aes-192-ecb', 'aes-192-gcm', 'aes-192-ofb', 'aes-256-cbc', 'aes-256-cfb', 'aes-256-ctr', 'aes-256-ecb', 'aes-256-gcm', 'aes-256-ofb', 'des-cbc', 'des-ecb', 'des-ede', 'des-ede-cbc', 'des-ede3-cbc', 'rc2-cbc', 'rc4' ]
- 查看达梦数据库支持的相同的加密算法:
SELECT * FROM V$CIPHERS Where CYT_NAME in ('AES_128_CBC', 'AES_128_CFB', 'AES_128_CTR', 'AES_128_ECB', 'AES_128_GCM', 'AES_128_OFB', 'AES_192_CBC', 'AES_192_CTR', 'AES_192_ECB', 'AES_192_GCM', 'AES_192_OFB', 'AES_256_CBC', 'AES_256_CFB', 'AES_256_CTR', 'AES_256_ECB', 'AES_256_GCM', 'AES_256_OFB', 'DES_CBC', 'DES_ECB', 'DES_EDE', 'DES_EDE_CBC', 'DES_EDE3_CBC', 'RC2_CBC', 'RC4');
- 可以查询到 electron 与达梦数据库都支持的算法有 3 种,那么可以将 dm.ini 中的 COMM_ENCRYPT_NAME 设置为 RC4,命令如下:
SP_SET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME','RC4');
- 然后重启数据库,执行以下查询命令:
SQL> select para_name,para_value from v$dm_ini where para_name='COMM_ENCRYPT_NAME';
行号 PARA_NAME PARA_VALUE
1 COMM_ENCRYPT_NAME RC4
- 启动程序,正常运行: