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