【发布时间】:2023-03-03 02:49:01
【问题描述】:
当我创建 POST 请求时,我需要验证以下字段:first_name、last_name、mobile_number、reservation_date、reservation_time 和 people(party size)。
现在我有一个中间件函数来检查是否缺少任何字段:
function hasProperties(...properties) {
return function (res, req, next) {
const { data = {} } = res.body;
try {
properties.forEach((property) => {
if (!data[property]) {
const error = new Error(`${property}`);
error.status = 400;
throw error;
}
});
next();
} catch (error) {
next(error);
}
};
}
然后在我的控制器中:
const hasAllProps = hasProperties(
'first_name',
'last_name',
'mobile_number',
'reservation_date',
'reservation_time',
'people'
);
这很好用,但是我必须为几个字段添加额外的验证。我有 2 个附加功能:一个是确保 people 字段是一个数字,另一个是确保 reservation_date 是一个日期:
const validPeople = (req, res, next) => {
const { people } = req.body;
if (Number.isInteger(people)) {
return next();
}
next({ status: 400, message: 'people' });
};
const validDate = (req, res, next) => {
const { reservation_date } = req.body;
if (reservation_date instanceof Date) {
return next();
}
next({ status: 400, message: 'reservation_date' });
};
然后我将它们全部传递给我的导出:
create: [hasAllProps, validDate, validPeople]
我一次只能发送一个错误,在本例中是它的validDate,因为它在exports 数组中的validPeople 之前。我无法将所有错误都放入数组中,因为我需要回复:
status: 400, message: '<the-specific-field>'
有没有办法单独发送所有这些错误消息?
【问题讨论】:
标签: javascript node.js rest express validation