繁体   English   中英

Sequelize TypeError:无法读取未定义的属性(读取“拆分”)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM