自定义续集验证错误

时间:2017-01-05 10:26:14

标签: javascript node.js validation sequelize.js

我已经使用sequelize@3.4.1一段时间了,现在我需要将sequelize更新到最新的稳定版本(3.28.0)

TL; DR:如何更改验证错误的结构,而不是操纵' msg'模型定义中的属性?

问题是,我在所有模型中使用自定义验证消息,例如:

var Entity = sequelize.define("Entity", {
    id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        primaryKey: true,
        autoIncrement: true,
        validate: {
            isInt: {
                msg: errorMessages.isInt()
            }
        }
    },
    name: {
        type: DataTypes.STRING(128),
        allowNull: false,
        unique: {
            name: "uniqueNamePerAccount",
            args: [["Name", "Account ID"]],
            msg: errorMessages.unique()
        },
        validate: {
            notEmpty: {
                msg: errorMessages.notEmpty()
            }
        }
    },
    accountId: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        unique: {
            name: "uniqueNamePerAccount",
            args: [["Name", "Account ID"]],
            msg: errorMessages.unique()
        },
        validate: {
            isInt: {
                msg: errorMessages.isInt()
            }
        }
    }
}

直到sequelize@3.4.1我曾经将自己的属性添加到验证错误中,所以实际上消息是包含消息和其他属性(如内部错误代码)的对象。 以下是消息的示例:

function notEmpty() {
    return {
        innercode: innerErrorCodes.notEmpty,
        data: {},
        message: "cannot be empty"
    };
}
function unique() {
    return {
        innercode: innerErrorCodes.unique,
        data: {},
        message: util.format("There is already an item that contains the exact same values of the following keys")
    };
}

实际上,这就是实体过去的样子:

{"name":"SequelizeValidationError",
 "message":"Validation error: cannot be empty",
 "errors":[{"message":"cannot be empty",
            "type":"Validation error",
            "path":"name",
            "value":{"innercode":704,
                     "data":{},
                     "message":"cannot be empty"},
            "__raw":{"innercode":704,
                     "data":{},
                     "message":"cannot be empty"}}]}

所以基本上sequelize发现了我的消息''属性并将其附加到错误的值中。 但现在,在最新版本中,它看起来像sequelize抛出新的Error():( instance-validator.js行:268)

throw new Error(test.msg || 'Validation ' + validatorType + ' failed');

而不是3.4.1版本中引发的错误:

throw test.msg || 'Validation ' + validatorType + ' failed';

因此,我设置为自定义消息的错误对象显示为'对象对象' (最有可能在toString()之后)

我的问题是:如何影响错误的结构并添加除消息之外的更多属性?

P.S: 我也遇到了唯一约束自定义消息的问题,它有所不同,因为它不被视为验证器。 如何影响唯一约束错误结构?

非常感谢!

0 个答案:

没有答案