如何使用 Joi 将字段值拆分为 Hapi.js
How to split field values with Hapi.js using Joi
我有一个用例,我有一个 API,长度为 属性 12m 或 8ft.
var schema = Joi.object({
length: Joi.string().required(),
});
我需要一种方法 Joi 来拆分这个和 return 结构类似于的对象:
{ length: 12, type : 'm'} OR { length 8, type : 'ft'}
Joi 不会为你做那件事。充其量它可以将字符串转换为数字。
一个选项是添加一个 pre
处理程序方法并在那里创建变形的有效负载并将其传递给路由处理程序。 pre
方法只会在所有验证都通过后 运行。
它可能看起来像这样:
var createData = function (request, reply) {
var result = /(\d+)(.+)/.exec(request.payload.length);
var val = {
length: result[1],
type: result[2]
};
reply(val);
};
server.route({
method: 'POST',
path: '/',
config: {
validate: {
payload: {
length: Joi.string().required().valid('12m', '8f')
}
},
pre: [{ method: createData, assign: 'morph' }],
handler: function (request, reply) { reply(request.pre.morph); }
}
});
您也可以让用户 post 该数据对象而不仅仅是一个字符串。这将使整个事情变得容易得多。
我有一个用例,我有一个 API,长度为 属性 12m 或 8ft.
var schema = Joi.object({
length: Joi.string().required(),
});
我需要一种方法 Joi 来拆分这个和 return 结构类似于的对象:
{ length: 12, type : 'm'} OR { length 8, type : 'ft'}
Joi 不会为你做那件事。充其量它可以将字符串转换为数字。
一个选项是添加一个 pre
处理程序方法并在那里创建变形的有效负载并将其传递给路由处理程序。 pre
方法只会在所有验证都通过后 运行。
它可能看起来像这样:
var createData = function (request, reply) {
var result = /(\d+)(.+)/.exec(request.payload.length);
var val = {
length: result[1],
type: result[2]
};
reply(val);
};
server.route({
method: 'POST',
path: '/',
config: {
validate: {
payload: {
length: Joi.string().required().valid('12m', '8f')
}
},
pre: [{ method: createData, assign: 'morph' }],
handler: function (request, reply) { reply(request.pre.morph); }
}
});
您也可以让用户 post 该数据对象而不仅仅是一个字符串。这将使整个事情变得容易得多。