如何解决DynamoDB上的Joi错误TypeError:child.schema._getLabel不是函数

我在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 

有人可以帮我解释,为什么我得到这个错误,以及如何解决它?

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

以下解决scheme是生成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' } ] }; 

您应该能够成功插入一个项目。 我已经testing过了,工作正常。