- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我的目标是为帖子创建一个索引路径。用户应该能够指定一些查询参数(即标签、类型),但不能指定其他参数。澄清一下:
没关系:
/posts
/posts?tags=food
/posts?type=regular&tags=stackoverflow
这不行:
/posts?title=Hello
这是 hapi 包配置:
servers: [
{
host: 'localhost',
port: 3000,
options: {
labels: ["api"],
validation: {
abortEarly: false,
presence: 'forbidden'
}
}
}
],
请注意 presence: forbidden
选项。
这是路由配置:
handler: function (request, reply) {
Post.find(request.query, function (err, posts) {
if(err) {
console.log(err);
}
reply(posts);
});
},
validate: {
query: {
type: Joi.string().optional(),
tags: Joi.string().optional()
}
}
我的想法是验证应该允许 type
和 tags
参数的任何子集(包括空查询)。但是,在发出任何允许的请求后,我收到以下错误:
{
"statusCode": 400,
"error": "Bad Request",
"message": "value is not allowed",
"validation": {
"source": "query",
"keys": [
"value"
]
}
}
这是为什么呢?当然没有名为 value
的键。如何使验证按照我想要的方式进行?
最佳答案
如果您定义一个非类型模式对象,Joi 会在内部将其转换为 object()
。类型。所以这个模式:
var schema = {
type: Joi.string().optional(),
tags: Joi.string().optional()
};
变成:
var schema = Joi.object().keys({
type: Joi.string().optional(),
tags: Joi.string().optional()
});
因为你在服务器设置中将presence
设置为forbidden
,它被应用于对象类型,所以模式变成:
var schema = Joi.object().forbidden().keys({
type: Joi.string().optional(),
tags: Joi.string().optional()
});
如您所见,它将主要对象标记为禁止,除了 undefined
之外不允许任何值:
var Joi = require('joi');
var schema = Joi.object().forbidden().keys({
type: Joi.string().optional(),
tags: Joi.string().optional()
});
var value = {};
Joi.validate(value, schema, { presence: 'forbidden' }, function (err, value) {
console.log(err);
});
输出:
{ [ValidationError: value is not allowed]
name: 'ValidationError',
details:
[ { message: 'value is not allowed',
path: 'value',
type: 'any.unknown' } ],
_object: {},
annotate: [Function] }
因此您需要做的是将主要对象标记为required
或optional
以覆盖forbidden
:
validate: {
query: Joi.object().required().keys({
type: Joi.string().optional(),
tags: Joi.string().optional()
})
}
关于javascript - Hapijs 和 Joi : validate query params with presence: 'forbidden' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26214642/
我正在尝试使用 smack/asmack xmpp 库在 Android 上建立一个简单的 xmpp 群聊。基本上一切正常,除了:UNAVAILABLE presence,即当用户离开聊天室时,似乎被
什么是presence类型验证? validations: [{ type: 'presence', field: 'age'
我正在尝试 IBM Bluemix Presence Insights。此时,我可以概览不同区域已注册的设备数量。我想知道是否可以看到用户的(准确的)位置坐标。如果可能的话,有人可以给我一个定位准确度
实际上,我使用 smack API 编写了一个 IM 服务(继承了谷歌聊天)。但是当我想打印好友列表和他们的存在时,编译模式显示所有存在不可用,但在 Debug模式下它显示真正的可用性! 我的代码是.
目标:我正在努力为 discord 做一个丰富的存在。 代码: const RPC = require("discord-rpc"); const rpc = new RPC.Client({
我正在寻找转换此表的解决方案: ____V1______V2______V3______V4______V5______V6 1: SP1 SP2 SP3 NA
我正在具有不同网页的网站上查找数据。当我从一个网页移动到另一个网页时,我想使用隐式等待函数等待名为“位置”的值的存在。我的代码如下所示: wait = WebDriverWait(driver, 10
理想情况下,我希望找到简单、轻量级的代码,让所有连接到我网站的 Web 客户端都可以实时了解其他在线用户的状态。 我知道 ejabberd 可以做到这一点,但它也可以做很多其他事情,我希望代码占用空间
我正在尝试建立一个存在 channel 。但是返回的 auth 字符串不正确。 下面是后端代码: class pusherController extends Controller { pro
我正在将 IBM Presence Insights 与我的 Android 应用程序 + Estimote SDK 结合使用。 SDK 在输入时获取 Beacon UUID、主要和次要。接下来,它成
例如,我有 20 个房间要加入。简单的解决方案是向每个房间 ID 发送 20 条消息。考虑到性能,这很糟糕。 我想加入 20 个房间,只需发送一个 消息,如何实现?编写一个模块来 Hook 自定义信息
我正在构建一个 Whatsapp 克隆,但无法通过 Presence 找出一些内容。 我有两个 channel : channel "chats:*", Typi.ChatChannel ch
例如,我有 20 个房间要加入。简单的解决方案是向每个房间 ID 发送 20 条消息。考虑到性能,这很糟糕。 我想加入 20 个房间,只需发送一个 消息,如何实现?编写一个模块来 Hook 自定义信息
我想使用 Keras 创建一个音频分类系统,它可以简单地确定给定样本是否包含人声。没有其他的。这将是我的第一次机器学习尝试。 此音频预处理器存在。它声称没有完成,但它已经被 fork 了几次: htt
如果我有以下嵌套模型关系(全部 has_many):国家 .... 最佳答案 您可以调用或 @country.cities.map(&:streets).flatten.map
我需要根据库的存在有条件地编译一些代码。使用 autoconf/automake 似乎这应该很容易,但我无法弄清楚。 例如,如果存在一个 PNG 库,我想包含使用它的代码。我的 configure.a
我有一个“歌曲”实体和一个“标签”实体,它们之间具有多对多关系。一首歌曲可以有多个标签,一个标签可以应用于多首歌曲。 我想检查一首歌曲是否有与其关联的特定标签。如果歌曲有与之关联的标签,我想在表格 V
我有以下两个模型: class Offer < ApplicationRecord has_many :bookings end class Booking < ApplicationRecord
这是我期望的一个非常简单的问题,但我在指南或其他地方找不到明确的答案。 我的 ActiveRecord 有两个属性。我希望其中一个存在,另一个为零或空白字符串。 如何执行相当于 :presence =
使用 PubNub Presence 功能时,是否可以提供用户加入或离开 channel 时 PubNub 调用的 HTTP 回调?就我而言,我想调用 Parse.com 云函数。澄清一下:我不想从客
我是一名优秀的程序员,十分优秀!