【问题标题】:Is there a way to use a named function with Hapi validation?有没有办法使用带有 Hapi 验证的命名函数?
【发布时间】:2017-02-19 03:42:36
【问题描述】:

http://hapijs.com/tutorials/validation

我想将一个函数传递给我的验证块,以检查 v 是否存在作为源并确认 accountprofileipAddress 存在。文档说这是可能的,但没有使用函数 var 执行此操作的示例。

当我启动我的 API 时,我得到:Error: Invalid schema content: (account)

如何使用命名函数在 Hapi 中进行验证?

代码:

  var validateQueryString;

  validateQueryString = function(value, options, next) {
    console.dir({
      value: value,
      options: options
    });

    // do some validation here 

    return next(null, value);
  };

  routes.push({
    method: 'POST',
    path: '/export/{source}/{start}/{end?}',
    config: {
      validate: {
        query: {
          account: validateQueryString,
          profile: validateQueryString,
          ipAddress: validateQueryString
        },
        params: {
          source: joi.string().valid(['a', 'v', 't']),
          start: joi.string().regex(utcDateTimeRegex),
          end: joi.string().regex(utcDateTimeRegex)
        }
      }
    },
    handler: function(apiRequest, apiReply) {}
  });

尝试了其他调用方式,例如:

account: function(value, options, next) {
  return validateQueryString(value, options, next); }

没有运气。

【问题讨论】:

    标签: validation hapijs


    【解决方案1】:

    我不认为你可以有一个函数来同时处理这两个。

    通常,查询参数的完整“列表”的方法。这里有一段代码来说明:

    function validateQuery(value, options, next){
      console.log( 'validating query elements');
      for (var k in value) {
        console.log( k, '=', value[k]);
      }
      next(new Error(null, value);
    }
    

    你设置如下:

    routes.push({
        ...
        validate: {
          query: validateQuery,
          params: ...
        }
        ...
     }
    

    现在,假设您点击http://server/myroute?a=1&b=2&c=3,您将获得以下输出:

    validating query elements
    a = 1
    b = 2
    c = 3
    

    如果你想抛出错误,你必须调用next(),如下:

    next( new Error('some is wrong'), value );
    

    看来,“正确”的方法是有一个查询和参数的方法。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我建议您所做的事情超出了Joi 的意图。 Joi 用于针对 JS 对象的模式验证。您想要的是针对存在于架构本身之外的规则进行运行时验证。 Hapi 为此构建了一个名为 server method 的东西。利用服务器方法,您可以在那里应用您的业务验证,同时通过Joi 分离输入模型和输出模型形状验证的关注点。

      【讨论】:

        猜你喜欢
        • 2019-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2022-11-20
        • 1970-01-01
        相关资源
        最近更新 更多