![](/img/trans.png)
[英]Uncaught TypeError: Cannot read properties of undefined (reading 'split')
[英]Sequelize TypeError: Cannot read properties of undefined (reading 'split')
我正在尝试更新部分包含用分号分隔的字符串数组值的续集模型。
languages: {
type: Sequelize.STRING,
allowNull: false,
get() {
if (this.getDataValue('languages') === null) {
return [];
} else {
return this.getDataValue('languages').split(';');
}
},
set(val) {
if (val.length === 0) {
this.setDataValue('languages', null);
} else {
this.setDataValue('languages', val.join(';'));
}
},
},
我找到了解决方案。 在更新值之前,它会读取当前值,当它在数据库中为空时,它会给出未定义的值。 通过增强 if 检查它可以解决问题。
languages: {
type: Sequelize.STRING,
allowNull: false,
get() {
if (this.getDataValue('languages') === null || this.getDataValue('languages') === undefined) {
return [];
} else {
return this.getDataValue('languages').split(';');
}
},
set(val) {
if (val.length === 0) {
this.setDataValue('languages', null);
} else {
this.setDataValue('languages', val.join(';'));
}
},
},
简短的回答
最好检查变量是null
还是undefined
,记住这两个值是不同的。 null
表示什么都没有,分配了 null,而undefined
表示声明了一个变量但没有为其分配值。
你可以这样做
if (!!this.getDataValue('languages')) {
return this.getDataValue('languages').split(';');
} else {
return [];
}
长答案
如果你想拦截你的所有请求并替换值,例如:如果它是一个可为空的列表,我想显示[]
,如果它是一个可为空的布尔值,我想显示false
。
您可能想使用中间件来做到这一点。
这将类似于下面的代码:
const app = express();
app.set("json replacer", (k, v) => {
return formatJSONNull(k, v);
});
var formatJSONNull = function (k, v) {
if (v === null || v === undefined) {
if (listValues.indexOf(k) >= 0) {
return [];
} else if (integerValues.indexOf(k) >= 0) {
return 0;
} else if (boolValues.indexOf(k) >= 0) {
return false;
} else {
return "";
}
}
return v;
};
const listValues = ['languages'];
const boolValues = ['language_count'];
const integerValues = ['language_count'];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.