我如何使用Joi来清理hapi的查询参数?

我想知道如果我可以使用Joi来自动清理查询参数,而不是手动做到这一点?

这是我为路线所做的。

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模式。

 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能不能自动解决这个问题,那我就不用手动去做了。

首先,你正在validation的字段上有一个拼写错误 – “forms”而不是“从”。

Joi应该收到解码的URL查询。 通过用函数replaceJOI查询validation对象并检查值来检查很容易:

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

当你在你的例子中修复input错误时,它按预期工作。

如果你想做一些额外的数据处理,你总是可以使用函数forms的validation,并使用函数体中的Joi.validate()。