如何使用 Joi.raw() 获取原始输入
How to get the original input using Joi.raw()
我正在尝试使用 hapijs/joi 和 joi-date-extensions 验证一些输入
。我写这段代码 example1.js:
const BaseJoi = require('joi');
const Extension = require('joi-date-extensions');
const Joi = BaseJoi.extend(Extension);
const schema = Joi.object().keys({
start_date: Joi.date().format('YYYY-MM-DD').raw(),
end_date: Joi.date().min(Joi.ref('start_date')).format('YYYY-MM-DD').raw(),
});
const obj = {
start_date: '2018-07-01',
end_date: '2018-06-30',
}
console.log(schema.validate(obj));
代码returns这个错误:
child "end_date" fails because ["end_date" must be larger than or equal to "Sun Jul 01 2018 01:00:00 GMT+0100 (CET)"]
但是我想在错误中得到原始输入,类似这样的东西:
child "end_date" fails because ["end_date" must be larger than or equal to "2018-07-01"]
当我在 example2.js 中尝试此指令时:
start_date = Joi.date().format('YYYY-MM-DD');
console.log(start_date.validate('2018-07-31'));
结果是:
Tue Jul 31 2018 00:00:00 GMT+0100 (CET)
当我在 example3.js 中使用 raw()
时:
start_date = Joi.date().format('YYYY-MM-DD').raw();
console.log(start_date.validate('2018-07-31'));
它returns:
"2018-07-31"
在 example1.js 中,我想获取我的代码输入的原始日期。我该如何解决?
.raw
控制数据如何传输到 Joi.validate
的回调,即您的数据在验证过程后的样子。它不控制错误发生的情况。
为此,您可能需要使用 .error
。我从未使用过它,但我想它应该是这样的:
Joi.date().min(Joi.ref('start_date')).format('YYYY-MM-DD').raw().error(function (errors) {
var out = [];
errors.forEach(function (e) {
out.push(e.message.replace(/".*?"/g, function(match) {
var dateMatch = Date.parse(match);
if (isNaN(dateMatch)) {
return match;
} else {
// return formatted date from `dateMatch` here, too lazy to write it in p[l]ain JS...
}
}));
});
return out;
})
我正在尝试使用 hapijs/joi 和 joi-date-extensions 验证一些输入 。我写这段代码 example1.js:
const BaseJoi = require('joi');
const Extension = require('joi-date-extensions');
const Joi = BaseJoi.extend(Extension);
const schema = Joi.object().keys({
start_date: Joi.date().format('YYYY-MM-DD').raw(),
end_date: Joi.date().min(Joi.ref('start_date')).format('YYYY-MM-DD').raw(),
});
const obj = {
start_date: '2018-07-01',
end_date: '2018-06-30',
}
console.log(schema.validate(obj));
代码returns这个错误:
child "end_date" fails because ["end_date" must be larger than or equal to "Sun Jul 01 2018 01:00:00 GMT+0100 (CET)"]
但是我想在错误中得到原始输入,类似这样的东西:
child "end_date" fails because ["end_date" must be larger than or equal to "2018-07-01"]
当我在 example2.js 中尝试此指令时:
start_date = Joi.date().format('YYYY-MM-DD');
console.log(start_date.validate('2018-07-31'));
结果是:
Tue Jul 31 2018 00:00:00 GMT+0100 (CET)
当我在 example3.js 中使用 raw()
时:
start_date = Joi.date().format('YYYY-MM-DD').raw();
console.log(start_date.validate('2018-07-31'));
它returns:
"2018-07-31"
在 example1.js 中,我想获取我的代码输入的原始日期。我该如何解决?
.raw
控制数据如何传输到 Joi.validate
的回调,即您的数据在验证过程后的样子。它不控制错误发生的情况。
为此,您可能需要使用 .error
。我从未使用过它,但我想它应该是这样的:
Joi.date().min(Joi.ref('start_date')).format('YYYY-MM-DD').raw().error(function (errors) {
var out = [];
errors.forEach(function (e) {
out.push(e.message.replace(/".*?"/g, function(match) {
var dateMatch = Date.parse(match);
if (isNaN(dateMatch)) {
return match;
} else {
// return formatted date from `dateMatch` here, too lazy to write it in p[l]ain JS...
}
}));
});
return out;
})