2

我在 dynamodb 中有一个模式,如下所示,我正在使用 Joi、Vogels 和 NodeJS

schema: {
email: Joi.string().email(),
  item: Joi.array().items(Joi.object().keys({
    a: Vogels.types.uuid(),
    b: Joi.string(),
    c: Joi.string(),
    d: Joi.string().email()
 }))

我正在尝试在表中插入以下数据

var Obj = {
    email: 'a@b.com',
    item: [{
        b: 'data',
        c: 'some-data',
        d: 'b@c.com'
    }]
};

我正在使用下面的 nodejs 代码将数据插入到表中

Model.create(Obj, function(err, data) {
    if (err){
        console.log(err);
        return cb(err);
    } else {
   	console.log(data);
   	return cb(null,data);
    }
});

我收到以下错误

errors.push(this.createError('object.child', { key, child: child.schema._getLabel(key), reason: result.errors }, localState, options));

TypeError: child.schema._getLabel is not a function

有人可以帮助我或解释一下,为什么我会收到这个错误以及如何解决它?

4

1 回答 1

1

问题出在 UUID 字段上(即属性“a”)。我知道 vogels 应该自动生成 UUID。但是,没有为非键属性自动生成 UUID 值的工作示例,尽管根据它应该生成的文档。如果您为关键属性定义 UUID,它应该可以正常工作。

以下解决方案是生成 UUID 并将值分配给属性“a”的解决方法。

1)安装node-uuid模块

node install node-uuid

2)添加要求: -

var nodeUUID = require('node-uuid');

3) 如下所述更改对象:-

var Obj = {
    email : 'abc@b.com',
    item : [ {
        a : nodeUUID.v1(),
        b : 'data',
        c : 'some-data',
        d : 'b@c.com'
    } ]
};

您应该能够成功插入项目。我已经对其进行了测试并且工作正常。

于 2016-08-26T10:54:55.500 回答