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 に答える