使用 JOI 10.2 进行清理(扩展()?)
Sanitization with JOI 10.2 (extend()?)
JOI 10 用于验证针对 API 的调用。我现在想在验证 JSON 之前清理许多(但不是全部)包含在 JSON 中的字符串,即过滤掉某些字符。我知道这对于最近的 JOI 版本来说是一项简单的任务,因为我可以使用 custom() 方法。不幸的是,更新 JOI 不是一个选项,所以我目前正在寻找一种优雅的方法来解决这个问题,最好使用 JOI 模式。
我发现有一个 extend() 函数允许我定义自定义 types/validations。但是,我不完全确定如何使用它以及将代码放在哪里。另外,我不确定它是否适合改变字符串。我可以使用 extend() 来实现吗?如果没有,是否有其他方法可以在 JOI 中执行此操作?
好的,其实很简单。
const customJOI = JOI.extend({
name: "sanitizedString",
base: JOI.string(),
pre(value: string, state: any, options: any) {
return value.replace(/yourregex/, "");
}
});
并且在需要使用 .sanitizedString()
而不是 .string()
进行清理的地方使用 customJOI 而不是 JOI。
JOI 10 用于验证针对 API 的调用。我现在想在验证 JSON 之前清理许多(但不是全部)包含在 JSON 中的字符串,即过滤掉某些字符。我知道这对于最近的 JOI 版本来说是一项简单的任务,因为我可以使用 custom() 方法。不幸的是,更新 JOI 不是一个选项,所以我目前正在寻找一种优雅的方法来解决这个问题,最好使用 JOI 模式。
我发现有一个 extend() 函数允许我定义自定义 types/validations。但是,我不完全确定如何使用它以及将代码放在哪里。另外,我不确定它是否适合改变字符串。我可以使用 extend() 来实现吗?如果没有,是否有其他方法可以在 JOI 中执行此操作?
好的,其实很简单。
const customJOI = JOI.extend({
name: "sanitizedString",
base: JOI.string(),
pre(value: string, state: any, options: any) {
return value.replace(/yourregex/, "");
}
});
并且在需要使用 .sanitizedString()
而不是 .string()
进行清理的地方使用 customJOI 而不是 JOI。