首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Joi对hapi的查询参数进行净化?

如何使用Joi对hapi的查询参数进行净化?
EN

Stack Overflow用户
提问于 2016-02-05 23:48:15
回答 1查看 4.1K关注 0票数 3

我想知道是否可以使用Joi自动清除查询参数,而不是手动进行?

这就是我为这条路线所做的。

代码语言:javascript
运行
复制
var querystring = require('querystring');

function dateToString(date) {
  return moment(new Date(querystring.unescape(date))).toISOString();
}

function posts(request, reply) {
  request.query.from = dateToString(request.query.from);
}

这是Joi模式。

代码语言:javascript
运行
复制
var topPostsConfig = {
  description: 'Top posts',
  plugins: {
    'hapi-swagger': {
        order: 1
    }
  },
  validate: {
    query: {
       form: Joi.date().iso().optional().default(moment().subtract(2, 'day').utc().format()).description('start date for query')
    }
  }
}

{
  method: 'GET',
  path: '/posts',
  handler: posts,
  config: topPostsConfig
}

只是想知道Joi是否有什么特殊的方法来自动清理查询参数,使其成为未转义字符?

编辑:请求以2016-02-05T20%3A26%3A34.916Z的形式出现,由浏览器转义。我在想,如果Joi能自动解开它,那么我就不用手动操作了。

EN

回答 1

Stack Overflow用户

发布于 2016-03-03 01:32:31

首先,您在要验证的字段上有一个错误--“表单”而不是“开始”。

Joi应该接收解码的URL查询。通过用函数替换JOI查询验证对象并检查值,可以很容易地进行检查:

代码语言:javascript
运行
复制
server.route({
  method: 'GET',
  path: '/posts',
  handler: (req, reply) => {
    reply(req.query);
  },
  config: {
    description: 'Top posts',
    validate: {
      query: (value, options, next) => {
        console.log(value);
        next(null, value);
      },
    },
  },
});

当您在您的示例中修复错误时,它会像预期的那样工作。

如果您想做一些额外的数据处理,您可以始终使用函数形式的验证和使用函数体的Joi.validate()。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35235464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档