Как исправить ошибку 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'
    } ]
};

Вы должны быть в состоянии вставить элемент успешно. Я проверил это и работает нормально.

Другие вопросы по тегам