![](/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.