标签: joi

Joi对象验证:如何验证具有未知密钥名称的值?

我有一个我不可能知道的关键名称的对象 - 它们是由用户创建的.但是我确实知道它们(键)将要存储的值,并且它们(值)将成为ISO字符串.如何验证这些值?并且,可选地,如何验证未知对象的键,即:

 key: Joi.string().min(2).max(25)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过的是基于Joi API文档:

使用Joi.object([schema])而不是普通JS对象的另一个好处是>你可以在对象上设置任何选项,比如允许未知键,例如:

const schema = Joi.object({ arg: Joi.string().valid('firstname', 'lastname', 'title', 'company', 'jobtitle'), value: Joi.string(), }).pattern(/firstname|lastname/, Joi.string().min(2));

我从这个例子中理解的是,argkey表示Joi.object()'s' key,value代表它value.

我的例子:

campaign: Joi.object({
  arg: Joi.string().valid( 'unknown' ),
  value: Joi.date().iso(),
}).pattern( /unknown/, Joi.string().min(2).max(25) )
Run Code Online (Sandbox Code Playgroud)

我的意见;

campaign: { g_ad_adwords: "2017-01-19T11:33:26.205Z" }
Run Code Online (Sandbox Code Playgroud)

我的错误:

"广告系列"失败,因为["g_ad_adwords"不允许]

validation hapijs joi

13
推荐指数
1
解决办法
7856
查看次数

如何扩展 Joi 模式?

我有一个名为 user 的 joi 架构

const user = {
  firstName: Joi.string()
    .min(2)
    .max(50)
    .required()
    .label('First Name'),
  lastName: Joi.string()
    .min(3)
    .max(50)
    .required()
    .label('Last Name'),
  email: Joi.string()
    .allow('')
    .email({ minDomainAtoms: 2 })
    .max(100)
    .label('Email Address'),
}
Run Code Online (Sandbox Code Playgroud)

我还有一个叫owner

const ownerSchema = {
  firstName: Joi.string()
    .min(2)
    .max(50)
    .required()
    .label('First Name'),
  lastName: Joi.string()
    .min(3)
    .max(50)
    .required()
    .label('Last Name'),
  email: Joi.string()
    .allow('')
    .email({ minDomainAtoms: 2 })
    .max(100)
    .label('Email Address'),
  number: Joi.string()
    .regex(/[0-9]/)
    .length(10)
    .required()
    .label('Phone Number'),
  dateOfBirth: Joi.date(),

  kycDetails: Joi.array()
    .items(schemaKyc)
    .required(),
  bankDetails: Joi.array()
    .items(schemaBank)
    .required(), …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs joi

13
推荐指数
3
解决办法
6354
查看次数

JOI 电子邮件验证

我使用 Joi 库作为我的 CRA 项目的独立验证器,但是在触发email()验证器时,我收到了神秘错误

Uncaught Error: Built-in TLD list disabled

hapijs joi

13
推荐指数
2
解决办法
2万
查看次数

使用Joi,要求两个字段中的一个非空

如果我有两个字段,我只想验证至少一个字段是非空字符串,但是当两个字段都是空字符串时失败.

这样的事情无法验证

var schema = Joi.object().keys({
    a: Joi.string(),
    b: Joi.string()
}).or('a', 'b');
Run Code Online (Sandbox Code Playgroud)

验证时

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

or条件只测试了两种关键的存在ab,但确实为条件测试是否a还是b如此.Joi.string()空字符串会失败.

以下是一些要展示的测试用例的要点

http://requirebin.com/?gist=84c49d8b81025ce68cfb

javascript hapijs joi

12
推荐指数
2
解决办法
7942
查看次数

Nodejs - Joi检查字符串是否在给定列表中

我正在使用Joi包进行服务器端验证.
我想检查一个给定的字符串是否在给定的列表中,或者它是否不在给定的列表中.(定义黑名单或值列表的白名单),
"in""notIn"函数.我可以这样做吗? ?

var schema = Joi.object().keys({
    firstname: Joi.string().in(['a','b']),
    lastname : Joi.string().notIn(['c','d']),
});
Run Code Online (Sandbox Code Playgroud)

node.js joi

12
推荐指数
2
解决办法
4066
查看次数

joi_1.default.validate不是函数

我想在调用控制器逻辑之前验证我的Express路由。我使用joi并创建了一个验证器,该验证器能够针对架构对象验证Request对象

import { Request, Response, NextFunction } from 'express';
import joi, { SchemaLike, ValidationError, ValidationResult } from '@hapi/joi';
import { injectable } from 'inversify';

@injectable()
export abstract class RequestValidator {
    protected validateRequest = (validationSchema: SchemaLike, request: Request, response: Response, next: NextFunction): void => {
        const validationResult: ValidationResult<Request> = joi.validate(request, validationSchema, {
            abortEarly: false
        });

        const { error }: { error: ValidationError } = validationResult;

        if (error) {
            response.status(400).json({
                message: 'The request validation failed.',
                details: error.details
            });
        } else {
            next(); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express typescript joi

12
推荐指数
6
解决办法
3270
查看次数

如何在Joi字符串验证中使用枚举值

我正在使用Joi验证器来处理我的HTTP请求.我有一个名为的参数type.我需要确保参数的可能值是"ios"或"android".

我怎样才能做到这一点?

body : {
  device_key : joi.string().required(),
  type : joi.string().required()
}
Run Code Online (Sandbox Code Playgroud)

validation node.js express joi

11
推荐指数
3
解决办法
5609
查看次数

Joi 验证器条件模式

我需要创建动态模式以根据请求查询中的键node js使用Joi 验证器来验证我的 api请求查询。说下面提到的模式是我的有效查询。

我正在使用hapi/joi版本16.1.8

组合1

{ type: 1, firstname: 'user first name', lastname: 'user last name'}
Run Code Online (Sandbox Code Playgroud)

组合2

{ type: 2 , salary: 1000, pension: 200}
Run Code Online (Sandbox Code Playgroud)

组合3

{ type: 3 , credit: 550, debit: 100}
Run Code Online (Sandbox Code Playgroud)

如您所见,对象键因 的值而异type。如何正确处理?

我们可以使用Joi.alternatives处理两个条件,例如

const schema = Joi.alternatives().conditional(Joi.object({ type: 1 }).unknown(), {
    then: Joi.object({
        type: Joi.string(),
        firstname: Joi.string(),
        lastname: Joi.string()
    }),
    otherwise: Joi.object({
        type: Joi.number(),
        salary: Joi.any(),
        pension: Joi.any()
    })
});
Run Code Online (Sandbox Code Playgroud)

但是如何在 3 个条件下做到这一点?

javascript node.js hapijs joi

11
推荐指数
4
解决办法
1万
查看次数

从 Typescript 类型/接口生成 Joi 模式

我想从 Typescript 类型或接口生成一些 joi 模式对象。在我最初的搜索中,我发现了一些相反的事情(从 joi 模式生成 Typescript 类型/接口),并且ts-interface-builder提供ts-interface-checker了一些基于 Typescript 类型/接口创建运行时检查器的能力,但仍然缺乏功能支持,并且整个使用围绕道具/方法的类和装饰器来完成此任务的一堆粗糙的东西。

有没有什么东西可以生成这样的 joi 模式?或者有更成熟的接口/类型运行时检查替代方案?(当从数据库中提取并确保来自数据库的响应具有正确的结构时很有用)

编辑:我想在这个io-ts github问题上有一个关于此类问题的很好的帖子。

javascript node.js typescript joi

11
推荐指数
1
解决办法
9335
查看次数

Joi验证 - 与POST的日期比较

我目前正在HapiJS/NodeJS中使用Joi来验证数据.一个POST特别具有两个ISO日期(开始日期和结束日期),这两个日期被传递到路线并经过验证以确保它们是ISO日期.

{
    method: 'POST',
    path: '/api/calendar',
    handler: calendar.getInfo,
    config: {
        validate: {
            payload: {
                start: Joi.date().iso(),
                end: Joi.date().iso()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过这两个日期并在控制器中进行一些验证,以确保开始日期在结束日期之前(即,开始日期不能是2月,结束日期是1月).

我的问题是,如果有一种方法让Joi确定这个并且出错了吗?如果需要更多信息,请与我们联系.

谢谢!Ť

validation node.js hapijs joi

10
推荐指数
2
解决办法
5724
查看次数

标签 统计

joi ×10

node.js ×6

hapijs ×5

javascript ×5

validation ×3

express ×2

typescript ×2

reactjs ×1