【问题标题】:How to fix Joi error on DynamoDB TypeError: child.schema._getLabel is not a function如何修复 DynamoDB TypeError 上的 Joi 错误:child.schema._getLabel 不是函数
【发布时间】:2025-12-20 12:00:07
【问题描述】:

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

谁能帮我解释一下,为什么我会收到这个错误以及如何解决它?

【问题讨论】:

  • 您在代码的第一个 sn-p 中的架构末尾缺少一个括号。
  • @PatrickMotard 架构代码仅用于表示目的

标签: javascript node.js amazon-dynamodb joi vogels


【解决方案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'
    } ]
};

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

【讨论】:

    最近更新 更多