Amazon DynamoDB 自动售货机
这个图书馆提供 Marshaller 转换本地 JavaScript 的类
到 DynamoDB 属性变量和返回值。 它的设计与工作
ES6功能,如集、地图和可移动性,可以配置为支持
仅由 JavaScript( 如空的二进制缓冲器) 或由
亚马逊DynatomDB(如任意大小的数字),取舍最小.
开始
用来使用 Marshaller 将 JavaScript 对象转换为需要的数据类型
由亚马逊DynamoDB制作
marshallItem数字 :
import {BinarySet, Marshaller} from '@aws/dynamodb-auto-marshaller';
const marshaller = new Marshaller();
const original = {
string: 'a string',
number: 1234,
list: [
'a',
'list',
'of',
'values',
],
buffer: Buffer.from([0xde, 0xad, 0xbe, 0xef]),
setOfBuffers: new BinarySet([
Uint8Array.from([0xde, 0xad]),
Uint8Array.from([0xbe, 0xef]),
Uint8Array.from([0xfa, 0xce]),
] as Iterable<ArrayBufferView>),
stringSet: new Set<string>([
'foo',
'bar',
'baz',
]),
any: {
level: {
of: {
nesting: {
is: {
supported: true
}
}
}
}
},
}
// create a variable ready to be used with DynamoDB's low-level API
const marshalled = marshaller.marshallItem(original);
// the output of `.marshallItem` can be converted back to a JavaScript type with
// `.unmarshallItem`
const unmarshalled = marshaller.unmarshallItem(original);
// With a few caveats (listed below), the unmarshalled value should have the
// same structure and data as the original value.
deepEqual(original, unmarshalled); // true
值可以转换为属性变量对象,也可以转换自属性参数 .marshallValue
财务报告和审定财务报表 .unmarshallValue 直接 :
import {Marshaller} from '@aws/dynamodb-auto-marshaller';
const marshaller = new Marshaller();
const marshalled = marshaller.marshallValue('string'); // returns {S: 'string'}
const unmarshalled = marshaller.unmarshallValue(marshalled); // returns 'string'
洞穴
有几类数值不能在 JavaScript和DynamoDB,如"大数字","空值",和"混合类型"等.
数字支持
默认情况下, Marxler 将会解开 DynamoDB 返回的数值
输入 NumberValue 而不是输入本地 JavaScript 数字.
DynamoDB中的数字的精确度可能高达38位,超过了
在 JavaScript 中可用的精度 number。 。 。 . NumberValue 因此,实例
将 DynamoDB 返回的值作为字符串存储,并且只强制值
当实例以算术表达式出现时, 输入 JavaScript 编号,
当它传递给 JSON.stringify,或何时 valueOf 方法被称为.
同样,数字集作为 NumberValueSet 实例
与数字和 NumberValue编号.
要禁用此行为, 将配置选项参数传递到
Marshaller 带有 unwrapNumbers 设置为 true数字 :
import {Marshaller} from '@aws/dynamodb-auto-marshaller';
const marshaller = new Marshaller({unwrapNumbers: true});
空值支持
DynamoDB的数据模型要求字符串,集和二进制属性具有 长度大于0,而JavaScript没有这样的要求. 以 默认时, marxler 将不会试图更改空值, 如 marshaller 无法分解一个字段所使用的任何西格值 本来是要合法地抑制这种价值的.
Marxler提供了两个处理空值的选入选项,这两个选项都是
使用 onEmpty 配置选项.
设置 onEmpty 改为 'nullify' 将指示 marxler 转换为空
值改为无属性值({NULL: true}并坚持到DynamoDB.
这使得项目的消费者知道空值已被保存, 尽管
将稍作改动。 从 DynamoDB 获取时, 值会是
未终止为 null数字 :
import {Marshaller} from '@aws/dynamodb-auto-marshaller';
const marshaller = new Marshaller({onEmpty: 'nullify'});
const marshalled = marshaller.marshallValue(''); // returns {NULL: true}
const unmarshalled = marshaller.unmarshallValue(marshalled); // returns null
设置 onEmpty 改为 'omit' 将引导 marxler 删除空值
摘自序列项目:
import {Marshaller} from '@aws/dynamodb-auto-marshaller';
const marshaller = new Marshaller({onEmpty: 'omit'});
const marshalled = marshaller.marshallValue(''); // returns undefined
const unmarshalled = marshaller.unmarshallValue(marshalled); // returns undefined
符号和函数
默认情况下,Marxler在遇到符号时会出错,或者
函数。 您可以指示 Marxler 而不是从它的
通过设置 onInvalid 配置选项到 'omit'数字 :
import {Marshaller} from '@aws/dynamodb-auto-marshaller';
const marshaller = new Marshaller({onInvalid: 'omit'});
const marshalled = marshaller.marshallValue(Symbol.iterator); // returns undefined
const unmarshalled = marshaller.unmarshallValue(marshalled); // returns undefined