簡體   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