如何解决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过了,工作正常。