不翻译模型上的键定义唯一的自定义错误
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')
问题
使用 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')