node-oracledb 4.0 已经发布,node-oracledb 是甲骨文公司官方发布的 Oracle 的 Node.js 驱动。此版本的新特性主要是包括查询和绑定命名的Oracle类型、Oracle 高级队列 API。具体更新内容如下:
实现重构
虽然模块仍然是调用 Oracle 客户端库的二进制层的 JavaScript 包装器,但是二进制层现在使用 Node.js 的 N-API 接口而不是 NAN。NAN 是起始的Node.js C++ 包装器,用于在更新 V8 引擎时为模块提供可移植性。使用更新的 N-API 接口带来了许多好处:
- N-API 有自己的 API 版本化方法,允许构建一个 node-oracledb 二进制文件(每个操作系统体系结构),可以使用当前和更高的 Node.js 版本
- npm 下载包的大小是 node-oracledb 3.1 包的四分之一,因为该包不需要包含每个 Node.js 版本的二进制文件
- node-oracledb 代码现在是纯 C,而不是 C++,所以 C 编译器需要构建的模块不再需要 C++ 11 的支持,这在一些较旧的环境中构建更容易
支持查询和绑定命名的 Oracle 类型
这使得 Node.js 成为一个很好的使用 SQL 或 PL/SQL 用户定义类型的环境,或者是在处理诸如 Oracle 的空间特性所使用的预先创建的类型时使用的一个很好的环境。
例如,创建一些类型和一个表:
CREATE TYPE dbharvesttype AS VARRAY(10) OF VARCHAR2(20)/CREATE TYPE dbfarmtype AS OBJECT ( farmername VARCHAR2(20), harvest dbharvesttype)/CREATE TABLE farmtab (id NUMBER, farm dbfarmtype);
在 node-oracledb 4.0 中,可以映射 JavaScript 对象以插入列 farm:
// A JavaScript object automatically mapped to the DBFARMTYPE object.// The case of the properties matters.const newFarm = { FARMERNAME: 'McDonald', HARVEST: [ 'corn', 'wheat', 'barley' ]}; await connection.execute( `INSERT INTO farmtab (id, farm) VALUES (:id, :f)`, { id: 1, f: { type: 'DBFARMTYPE', // name of the top level DB type, case sensitive val: newFarm } });
查询 FARMTAB 返回一个 DbObject,它在 node-oracledb 4.0 中是新的:
const result = await connection.execute(`SELECT farm FROM farmtab WHERE id = 1 `); // a DbObject for the named Oracle type:const farm = result.rows[0][0]; // The whole object:// [MYUSER.DBFARMTYPE] { FARMERNAME: 'MacDonald', HARVEST: [ 'corn', 'wheat', 'barley' ] }console.log(farm); // Objects can be stringified:// {"FARMERNAME":"MacDonald