Как исправить ошибку Joi на DynamoDB 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
Может кто-нибудь помочь мне или объяснить, почему я получаю эту ошибку и как ее исправить?
1 ответ
Проблема в поле UUID (т. Е. Атрибут "а"). Я понимаю, что 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'
} ]
};
Вы должны быть в состоянии вставить элемент успешно. Я проверил это и работает нормально.