- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 JOI 扩展,如果他们在 JWT 范围内缺少某些角色,我可以将某些人列入黑名单,禁止他们发送某些 API 值。
到目前为止我已经这样做了:
const Joi = require('joi')
const { string, number, ref, required, only, lazy } = Joi.extend(joi => ({
name: 'string',
base: Joi.string(),
language: {
permits: 'you are not allowed to edit {{key}}'
},
pre (value, state, options) {
this.permissions = options.context.auth.credentials.scope
},
rules: [{
name: 'whitelist',
params: {
permits: Joi.array()
},
validate(params, value, state, options) {
const permitted = params.permits.find(value => this.permissions.includes(value))
return permitted ? value : this.createError('string.permits', {}, state, options)
}
}]
}))
效果很好。
但是,请注意名称和基数设置为“字符串”。我希望它适用于数字、数组、对象,随便你怎么说。
我已经试过了:
name: 'any',
base: Joi.any()
但它似乎不起作用:
/home/ant/Projects/roles-example/routes/validation.routes.js:55
reference: string().whitelist(['all-loans']),
^
TypeError: string(...).whitelist is not a function
我假设 any 允许我将函数附加到 JOI 中的任何其他类型。但是我好像做不到。
在我必须开始将其添加到所有 JOI 基本类型之前,有人对我有任何指示吗?
最佳答案
我解决这个问题的方法是分别声明 any
规则并将它们全部添加到每个 Joi 类型。
const Joi = require('joi')
const anyRules = j => [
{
name: 'whitelist',
params: {
permits: j.array()
},
validate(params, value, state, options) {
const permitted = params.permits.find(value => this.permissions.includes(value))
return permitted ? value : this.createError('string.permits', {}, state, options)
}
}
];
module.exports = Joi
.extend(j => ({
name: 'any',
base: j.any(),
rules: anyRules(j),
}))
.extend(j => ({
name: 'array',
base: j.array(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'boolean',
base: j.boolean(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'binary',
base: j.binary(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'date',
base: j.date(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'func',
base: j.func(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'number',
base: j.number(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'object',
base: j.object(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'string',
base: j.string(),
rules: anyRules(j).concat([
// ...
]),
}))
.extend(j => ({
name: 'alternatives',
base: j.alternatives(),
rules: anyRules(j).concat([
// ...
]),
}))
;
关于joi - 能否将 JOI 扩展应用于 'any()',以便它适用于所有类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617305/
我有一个 api,在过去的开发中,它会接收逗号分隔的字符串作为有效输入,并使用以下内容作为验证器: Joi.string() 但现在我想使用这里提到的字符串数组来实现相同的变量 https://git
这是我的 Joi 模式 const createRoom = { body: { createdBy: Joi.string().required(), members: Joi.
我刚刚遇到了我必须处理的这行代码: Joi.array().label('Emails').items(Joi.string()).required() 我特别不明白 .label('Emails')
我有两个文件,一个是 api.js,另一个是 handler.js。对于模式处理,我正在使用庆祝模块 @hapi/joi On api.js I wrote only the API name On
let obj = Joi.object().keys({ "id": Joi.string().required(), "array": Joi.array().items
我想使用 Joi 验证对象,该对象不使用 Joi.ref() 和乘法运算。 var object = { a: 5, b: 6 } // this is wrong as Joi.re
我正在构建一个 JOI 扩展,如果他们在 JWT 范围内缺少某些角色,我可以将某些人列入黑名单,禁止他们发送某些 API 值。 到目前为止我已经这样做了: const Joi = require('j
我有一个场景,我需要根据所在国家/地区使用不同的正则表达式验证增值税号。因此,当字段 language 为 SE 时,我想使用此正则表达式 /^\d{6}-\d{4}$/字段 company.vatN
根据 Joi 文档,您可以像这样使用 Joi.object(): const object = Joi.object({ a: Joi.number().min(1).max(10).inte
joi.string().valid(['foo', 'bar']) 已弃用。 Error: Method no longer accepts array arguments: allow 实现这一目
我如何使用 Joi 来验证替换字段具有零个或多个键/值对?并且每个键都是一个字符串,每个值都是一个字符串、数字或 bool ? "substitutions": { "somekey": "s
我有一个复杂的验证,它根据 JSON 中的 a 值而变化。 { type: 'a', thing: 1, foo: 'abc' } { type: 'b', thing: 2, bar: 123 }
我有一个这样的嵌套模式设置: var schema = Joi.object().keys({ first_name: Joi.string().required(), last_name:
我目前在我的应用程序中有以下架构: Joi.object().keys({ users: Joi.array().items(mySchema) }) 所以我可以获得一组用户并验证它们。但现在我需
您好,我正在使用 "@hapi/joi": "^15.1.1"。很遗憾,我现在无法更新到最新的 Joi 版本。 这是我的验证模式 const schema = { name: Joi.str
我正在尝试验证一个架构,该架构与其他字段一起具有一系列自引用对象,如下所示: export const answer = answerModel.concat(Joi.object().keys({
我在 Joi 验证方面遇到了一个问题(或者我认为是一个问题)。如果它作为请求正文的一部分传递,我正在尝试为不存在的键分配一个值。 例如: parameters: Joi.object().keys({
我想为 populatedString 创建自定义 Joi 类型,方法是使用 .extend(..) 创建一个基于 joi.string() 的类型 其中: trim 字符串 如果 trimmed s
我必须逐个验证值,而不是为多个值传入整个架构。基于此处的单值验证文档 https://hapi.dev/module/joi/ 和这个示例代码 const validator: AnySchema =
我尝试使用 Joi.alternatives.try() 创建一个 Joi 模式.这是我尝试过的模式。 Joi.alternatives().try(Joi.object({ type: Jo
我是一名优秀的程序员,十分优秀!