我想知道是否可以使用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可以自动取消转义,那么我就不必手动进行。 最佳答案
首先,您要验证的字段上有一个错字-“form”而不是“from”。
Joi应该会收到解码的URL查询。通过用函数替换JOI查询验证对象并检查值,很容易检查:
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()。
关于javascript - 如何使用Joi清理hapi的查询参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35235464/