使用Catalyst Node.js SDK时,传递对象数组调用NoSQLItem.from()遇异常
解决Catalyst Node.js SDK批量插入NoSQL表时的"Value provided for values is expected to be a non-empty Array"错误
你遇到的问题是误用了NoSQLItem.from()方法的用法,以下是两种修正方案:
方案一:直接传递普通对象数组(最简方式)
Catalyst的insertItems()方法支持直接接收普通JavaScript对象数组,无需手动转换为NoSQLItem实例:
const { NoSQLItem } = require("zcatalyst-sdk-node/lib/no-sql"); const catalystApp = catalyst.initialize(req); const nosql = catalystApp.nosql(); const table = await nosql.getTable("orders"); const plainJson = [ { pkey: 1, skey: 1200 }, { pkey: 1, skey: 1201 }, { pkey: 1, skey: 1202 }, ]; // 直接将普通对象数组传入insertItems const plainInsert = await table.insertItems(plainJson);
方案二:逐个转换为NoSQLItem实例(按需使用)
如果需要对单个对象做自定义处理(比如添加元数据),可以遍历数组逐个转换:
const { NoSQLItem } = require("zcatalyst-sdk-node/lib/no-sql"); const catalystApp = catalyst.initialize(req); const nosql = catalystApp.nosql(); const table = await nosql.getTable("orders"); const plainJson = [ { pkey: 1, skey: 1200 }, { pkey: 1, skey: 1201 }, { pkey: 1, skey: 1202 }, ]; // 遍历数组,将每个对象转为NoSQLItem实例 const noSqlItems = plainJson.map(item => NoSQLItem.from(item)); const plainInsert = await table.insertItems(noSqlItems);
错误原因
NoSQLItem.from()是用来转换单个普通JS对象为NoSQLItem实例的方法,你直接传入了整个数组,导致该方法无法正确解析,最终insertItems()接收到的不是合法的实例数组,因此抛出错误。
内容的提问来源于stack exchange,提问作者Ethiraj Ganesan
相关产品推荐
相关产品推荐

