首页 > 解决方案 > 如何通过 Joi 检查值是对象还是对象数组

问题描述

我的请求正文可以是单个 JSON 对象或 JSON 对象数组:

单个 JSON 对象

{
   "name" : "item 1",
   "description" : "item 1 description"
}

JSON 对象数组

[{
   "name" : "item 1",
   "description" : "item 1 description"
}, {
   "name" : "item 2",
   "description" : "item 2 description"
}
]

我想通过celebrate/Joi来验证这些案例

export const Create = celebrate({
    [ Segments.BODY ]: Joi.any() // how can I handle them here
});

标签: javascriptnode.jsexpressvalidationjoi

解决方案


如何使用 vanilla JavaScript 判断 item 是数组还是对象:

    const arrayOrObject = (item) => {
      if (item instanceof Array) return ‘array’;
      else if (item instanceof Object) return ‘object’;
      return null;
    }

类似的“数组或对象”测试使用Joi

    const Joi = require('@hapi/joi');

    const isArray = (item) => !Joi.array().validate(item).error;
    const isObject = (item) => !Joi.object().validate(item).error;

    let arr = [1,2,3];
    console.log(isArray(arr));  // true
    console.log(isObject(arr)); // false

    obj = {foo: "bar"};
    console.log(isArray(obj));  // false
    console.log(isObject(obj)); // true

推荐阅读