我有一个用例,我有一个API,其属性长度为 12m 或 8ft 。
var schema = Joi.object({
length: Joi.string().required(),
});
我需要一种方法让Joi拆分它并返回一个结构类似的对象:
{ length: 12, type : 'm'} OR { length 8, type : 'ft'}
答案 0 :(得分:4)
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); }
}
});
您也可以让用户发布该数据对象而不仅仅是字符串。这将使整个事情变得更加容易。