续集类型错误:无法读取未定义的属性(读取"拆分")



我正在尝试部分更新包含以分号分隔的字符串数组值的序列化模型。

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(';'));
}
},
},

我找到了一个解决方案。在更新值之前,它读取当前值,当它在数据库中为null时,它给出未定义。通过增强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'];

最新更新