8

我正在使用 Joi 来验证服务器中的 JavaScript 对象。架构如下所示:

var schema = Joi.object().keys({
    displayName: Joi.string().required(),
    email: Joi.string().email(),
    enabled: Joi.boolean().default(false, "Default as disabled")
}).unknown(false);

如果对象中有未知键,则上面的模式将报告错误,这是预期的,但我想要的是无声地剥离所有未知键,而不会出现错误。有可能做到吗?

4

4 回答 4

9

stripUnknown如果要从正在验证的对象中去除未知键,则需要使用该选项。

cf https://github.com/hapijs/joi/blob/master/API.md#validatevalue-schema-options-callback上的选项

于 2015-07-28T15:46:40.883 回答
4

在版本 14.3.4 中,有一个简单的解决方案来解决这个问题。这是为您解决问题的代码。

// Sample data for testing.
const user = {
    fullname: "jayant malik",
    email: "demo@mail.com",
    password: "password111",
    username: "hello",
    name: "Hello"
};

// You define your schema here
const user_schema = joi
  .object({
    fullname: joi.string().min(4).max(30).trim(),
    email: joi.string().email().required().min(10).max(50).trim(),
    password: joi.string().min(6).max(20),
    username: joi.string().min(5).max(20).alphanum().trim()
  })
  .options({ stripUnknown: true });

// You validate the object here.
const result = user_schema.validate(user);

// Here is your final result with unknown keys trimmed from object.
console.log("Object with trimmed keys: ", result.value);
于 2020-12-29T09:28:26.400 回答
2
const joi = require('joi');

joi.validate(object, schema, {stripUnknown:true}, callback);
于 2017-10-02T20:49:23.247 回答
0

这是包含 strip unknown 选项的当前方法:

const validated = customSchema.validate(objForValidation, { stripUnknown: true });

如果您传入objForValidation的密钥未在您的 中定义customSchema,它将在验证之前删除该条目。

于 2020-07-19T05:19:50.493 回答