不翻译模型上的键定义唯一的自定义错误

Not translating key on model define unique custom error

问题

使用 18next.t 函数翻译键,让我得到通用的续集唯一约束错误消息而不是定义的自定义消息

环境

续集@5.22.4

i18next@21.3.3

模型定义candidate.js

...
module.exports = (sequelize, DataTypes) => {
  const Candidate = sequelize.define('Candidate', {
    status: {
      type: DataTypes.ENUM,
      values: [
        ...
      ],
    },
    docTin : {
    ...
      unique: {
        args: 'candidates_unique_doctin_company_unity',
        get msg() { return i18next.t('invalid-candidate-unique-doc-tin') }
      },
...

结果:

docTin must be unique

预计:

{Custom error message located on lang.json}

我创建的解决方案是对模型定义的主要创建函数进行原型设计,以允许在独特的 msg 属性上使用函数

...
  const orgCreate = Candidate.create;
  Candidate.create = function(){
    return orgCreate
      .apply(this, arguments)
      .catch(err => {
        const uniqueErrorName = 'SequelizeUniqueConstraintError'
        if (err.name === uniqueErrorName) {
          err.errors = err.errors.map(e => ({
            ...e,
            message: typeof e.message === 'function' ? e.message() : e.message
          }))
        }

        throw err;
      });
...

正在替换

get msg() { return i18next.t('invalid-candidate-unique-doc-tin') }

为了

msg: () => i18next.t('invalid-candidate-unique-doc-tin')