1

我有一个用例,我有一个 API,它的属性长度为12m8ft

var schema = Joi.object({
  length: Joi.string().required(),
});

我需要一种方法让Joi拆分它并返回一个结构类似于的对象:

{ length: 12, type : 'm'} OR { length 8, type : 'ft'}
4

1 回答 1

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); }
   }
});

您也可以让用户发布该数据对象,而不仅仅是一个字符串。这将使整个事情变得容易得多。

于 2015-07-02T20:00:32.653 回答