使用 Joi 验证时剥离未知键
Stripping unknown keys when validating with Joi
我正在使用 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);
如果对象中有未知键,上面的模式会报错,这是预料之中的,但我想要的是悄悄地剥离所有未知,不报错。可以做吗?
如果要从正在验证的对象中去除未知键,则需要使用 stripUnknown
选项。
参考 https://github.com/hapijs/joi/blob/master/API.md#validatevalue-schema-options-callback
上的选项
const joi = require('joi');
joi.validate(object, schema, {stripUnknown:true}, callback);
以下是包含 strip unknown 选项的当前方法:
const validated = customSchema.validate(objForValidation, { stripUnknown: true });
如果您传入的 objForValidation
具有未在您的 customSchema
中定义的密钥,它将在验证之前删除该条目。
与版本 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);
我正在使用 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);
如果对象中有未知键,上面的模式会报错,这是预料之中的,但我想要的是悄悄地剥离所有未知,不报错。可以做吗?
如果要从正在验证的对象中去除未知键,则需要使用 stripUnknown
选项。
参考 https://github.com/hapijs/joi/blob/master/API.md#validatevalue-schema-options-callback
上的选项const joi = require('joi');
joi.validate(object, schema, {stripUnknown:true}, callback);
以下是包含 strip unknown 选项的当前方法:
const validated = customSchema.validate(objForValidation, { stripUnknown: true });
如果您传入的 objForValidation
具有未在您的 customSchema
中定义的密钥,它将在验证之前删除该条目。
与版本 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);