标签: joi

使用 joi 验证数组包含特定值

我正在寻找一种方法来验证数组是否包含使用joi所需的值。
在网上找到这些问题 - #1 , #2,但没有一个有明确的答案。
我尝试了几种东西,但它们似乎不起作用,例如:
joi.array().items(joi.string().allow('required-string').required()), joi.array().items(joi.string().label('required-string').required()), joi.array().items(joi.string().valid('required-string'))

这就是我想要实现的目标:

公认:

['required-string'], ['required-string', 'other'], ['other','required-string'], ['other',...,'required-string',....,'more-other']
Run Code Online (Sandbox Code Playgroud)

拒绝:

[], ['other'], [null], etc..
Run Code Online (Sandbox Code Playgroud)

javascript joi

6
推荐指数
1
解决办法
2553
查看次数

Hapi/Joi 验证错误日志

我正在使用 hapi js 和 couchbase 开发 API。我正在使用 log4js 来记录错误。

   {
// Add a user level
        method: 'POST',
        path: '/api/v1/userlevel',
        config: {
          handler: (request, reply) => {
            const userlevel = new Userlevel(request.payload);
            userlevel.save((err) =>{
              if(err) {
                return reply({
                  status: 400,
                  message: err.message
                }).code(400);
                // logger.error(err);
              }
              // logger.debug(reply);
              return reply(userlevel).code(201);
            });
          },
           validate: {
             payload: {
               group_id: Joi.string(),
               name: Joi.string(),
               status: Joi.string(),
               index_id: Joi.number(),
               device_id: Joi.string(),
               created_at: Joi.string(),
               updated_at: Joi.string(),
               sys_version: Joi.string()
             }
           }
        }
      }
Run Code Online (Sandbox Code Playgroud)

当我使用无效数据向此端点发送 POST 请求时,它显示错误

POST 请求 …

node.js hapijs joi

6
推荐指数
1
解决办法
2437
查看次数

使用 JOI 如何定义具有 n 深度的对象验证递归数组

let obj = Joi.object().keys({
      "id":  Joi.string().required(),
      "array": Joi.array().items(obj).required()//array contains multiple
});
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在 JOI 中定义递归数组验证 obj.array 包含 n 个 obj

joi

6
推荐指数
1
解决办法
1339
查看次数

使用 Joi 和 nodeJS 验证嵌套对象中的唯一键对

我有以下 JSON 结构:

{
  key1: "value1",
  key2: "value2",
  transactions: [
    {
      receiverId: '12341',
      senderId: '51634',
      someOtherKey: 'value'
    },
    {
      receiverId: '97561',
      senderId: '46510',
      someOtherKey: 'value'
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一些 Joi 代码来验证事务数组中的每个对象都是唯一的,即receiverId 和senderId 的组合只出现一次。交易数组中可以有可变数量的元素,但总是至少有 1 个。有什么想法吗?

javascript validation node.js joi

6
推荐指数
2
解决办法
4136
查看次数

Joi 验证器只有一个键

我正在开发一个应该允许多个参数的 api,但对于其中三个我只想允许其中一个。每个键的值更容易,但我想知道 Joi 是否也允许它,或者我应该在我的服务器中添加额外的验证逻辑。

简而言之,对于 keys ab或者c我想失败具有三个以上之一的任何请求,因此:

  1. http://myapi.com/?a=value一个有效的请求。

  2. http://myapi.com/?b=value&c=value2无效的

谢谢!

javascript node.js joi

6
推荐指数
1
解决办法
2929
查看次数

Joi验证模式 - 两个字段不能具有相同的值

假设我有以下架构:

var schema = {
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().required()
};
Run Code Online (Sandbox Code Playgroud)

是否可以设置验证规则来检查两个字段是否具有不同的值?

javascript validation node.js joi

5
推荐指数
1
解决办法
2964
查看次数

Joi - not.exist()?

我正在尝试与 Joi 进行验证,但遇到了无法实现的场景。我有一个对象。在某些情况下,对象会有一个 id(编辑),而在其他情况下它不会(创建)。

我想验证在“id”不存在的情况下,应该有几个其他字段。

到目前为止,我唯一有效的解决方案是当 id 为空并且根本没有丢失时。有没有办法匹配不存在的密钥,或者我应该将其更改为 null (有点 hacky)。

joi.object().keys({
  id: joi
    .number()
    .min(0)
    .allow(null),
  someOtherField1: joi.when("id", { is: null, then: joi.required() })
});
Run Code Online (Sandbox Code Playgroud)

先感谢您!

javascript validation typescript joi

5
推荐指数
2
解决办法
5069
查看次数

Joi 验证时间字段

存在具有时间属性的对象 (22:30:00)。

const schema = Joi.object.keys({
  ...
  transactionDate: Joi.date().required(),
  transactionTime: Joi.time().required(), // ???
  ...
});
Run Code Online (Sandbox Code Playgroud)

如何使用Joi?

validation node.js joi

5
推荐指数
1
解决办法
3940
查看次数

.when() 在 joi 验证中,根据另一个键验证一个键

管理员将创建用户,同时他将输入一些随机字符串作为密码。当管理员编辑现有用户时,除非他想更改密码,否则不需要输入任何密码。如果管理员没有输入任何密码,则将使用旧密码。

所以我想用它.when()来处理这种情况。当_id有效载荷中存在时(只有当用户存在时才可能),那么我们应该使密码字段可选,否则密码是必需的。

这是我的 Joi 验证

const usersJoiSchema = Joi.object({
  _id: Joi.string().optional(),
  firstName: Joi.string().required(),
  lastName: Joi.string().required(),
  email: Joi.string().required(),
  password: Joi.string().when('_id', { is: Joi.exist(), then: Joi.optional(), otherwise: Joi.required() })
})
Run Code Online (Sandbox Code Playgroud)

.when在这种情况下,Joi 有一个方法。但出于某种奇怪的原因,它给了我

{"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"}
Run Code Online (Sandbox Code Playgroud)

作为api的响应,服务器控制台中没有任何内容。我试图比较字符串长度,_id而不是,exists()我也尝试过

password: Joi.string().when('_id', { is: Joi.string().required(), then: Joi.string().optional(), otherwise: Joi.string().required() }),

password: Joi.string().when('_id', { is: Joi.string(), then: Joi.string().optional(), otherwise: Joi.string().required() }),
Run Code Online (Sandbox Code Playgroud)

对于密码密钥,但仍然是同样的问题。

如果有人对此问题有任何想法,请帮助我。

validation schema node.js hapijs joi

5
推荐指数
2
解决办法
8698
查看次数

Joi 异步自定义验证

我需要验证这个对象:

{a: 'valueA', b: 'valueB'}
Run Code Online (Sandbox Code Playgroud)

为了验证“a”,我需要检查他的值(valueA)是否存在于我的数据库中。如果该值不存在,则该对象无效,否则有效。如何使用 Joi 验证器创建自定义 async/await 来实现此目的?

javascript joi

5
推荐指数
1
解决办法
2655
查看次数

标签 统计

joi ×10

javascript ×6

node.js ×6

validation ×5

hapijs ×2

schema ×1

typescript ×1