JavaScript 语言

前言

本章节主要介绍 JavaScript 应用开发常见问题,为用户提供 JavaScript 应用开发常见问题的分析和解决思路。除此之外,用户还可前往达梦技术社区参与更多问题讨论。

目录

正文

Npm 代理问题

【问题描述】

报错信息如下:

图片 1.png

【问题解决】

使用淘宝镜像进行下载:

npm --registry https://registry.npm.taobao.org install dmdb

安装 dmdb 时 network 相关报错

【问题描述】

报错信息如下:

图片 2.png

【问题解决】

设置 Properly :

npm config set registry https://registry.npm.taobao.org

Error: Cannot find module 'dmdb'

【问题描述】

报错信息如下:

图片 3.png

【问题解决】

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 视图)具体步骤如下:

  1. 查看 electron 支持的加密算法,通过 crypto.getCiphers(),代码如下:
const crypto = require('crypto') const ciphers = crypto.getCiphers() console.log(ciphers)
  1. 可以将其加入到 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' ]
  1. 查看达梦数据库支持的相同的加密算法:
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');

  1. 可以查询到 electron 与达梦数据库都支持的算法有 3 种,那么可以将 dm.ini 中的 COMM_ENCRYPT_NAME 设置为 RC4,命令如下:
SP_SET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME','RC4');
  1. 然后重启数据库,执行以下查询命令:
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
  1. 启动程序,正常运行:

图片 5.png

微信扫码
分享文档
扫一扫
联系客服