gpt4 book ai didi

javascript - 使用 Sequelize.js 的自定义验证错误

转载 作者:数据小太阳 更新时间:2023-10-29 04:52:05 26 4
gpt4 key购买 nike

可以自定义错误

Sequelize.ValidationError

型号:

  var PaymentType = sequelize.define('payment_type' , {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
code: {
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: true
},
field: 'code'
},
name: {
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: true
},
field: 'name'
}
}, {
timestamps: true,
paranoid: false,
underscored: true,
freezeTableName: true,
tableName: 'payment_types'
});

我的 Controller :

  update(req, res) {
paymentType
.update(req.body, {
where: {
id: req.params.id
}
})
.then( updatedRecords => {
res.status(200).json(updatedRecords);
})
.catch(Sequelize.ValidationError, error => {
res.status(400).json(error);
})
.catch( error => {
res.status(500).json(error);
});

},

我得到的错误是这样的:

{
"name": "SequelizeValidationError",
"message": "Validation error: Validation notEmpty failed",
"errors": [
{
"message": "Validation notEmpty failed",
"type": "Validation error",
"path": "name",
"value": {},
"__raw": {}
}
]
}

我想像这样传递错误(只有路径和消息):

{
"name":"The field cannot be empty",
"other_field":"custom error message"
}

我不知道我是否可以在模型中指定自定义消息,或者我必须创建一个函数来构建错误消息。

如果我必须构建一个函数,我该如何提取路径并自定义消息?

提前致谢。

最佳答案

您可以捕获 Sequelize 的 ValidationError 并循环遍历其 ValidationErrorItem 并根据错误类型编写自定义消息(由 ValidationErrorItem.validatorKey )。这是一个入门代码片段。

try {
// sequelize custom logic here
} catch(e) {
const messages = {};
if (e instanceof ValidationError) {
e.errors.forEach((error) => {
let message;
switch (error.validatorKey) {
case 'isEmail':
message = 'Please enter a valid email';
break;
case 'isDate':
message = 'Please enter a valid date';
break;
case 'len':
if (error.validatorArgs[0] === error.validatorArgs[1]) {
message = 'Use ' + error.validatorArgs[0] + ' characters';
} else {
message = 'Use between ' + error.validatorArgs[0] + ' and ' + error.validatorArgs[1] + ' characters';
}
break;
case 'min':
message = 'Use a number greater or equal to ' + error.validatorArgs[0];
break;
case 'max':
message = 'Use a number less or equal to ' + error.validatorArgs[0];
break;
case 'isInt':
message = 'Please use an integer number';
break;
case 'is_null':
message = 'Please complete this field';
break;
case 'not_unique':
message = error.value + ' is taken. Please choose another one';
error.path = error.path.replace("_UNIQUE", "");
}
messages[error.path] = message;
});
}
}

关于javascript - 使用 Sequelize.js 的自定义验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com