Sequelize 节点,新模型实例返回字符串文字而不是实际值

问题描述 投票:0回答:1

当我使用

await Session.create()
创建模型的新实例时,它返回默认文字,而不是生成的值。

我得到了

dataValues: {
 id: Literal { val: '(UUID())' },
 created_at: Literal { val: 'NOW()' },
 updated_at: Literal { val: 'NOW()' }
}

sql 表插入了正确的值,而不是生成的 uuid 和当前日期时间,但在使用 create() 时无法获取它们。

续集连接:

const sequelize = new Sequelize(process.env.SQL_DB, process.env.SQL_USER, process.env.SQL_PASSWORD,
  {
    host: process.env.SQL_HOST,
    dialect: 'mysql',
    dialectOptions: {
      multipleStatements: true
    },
    // logging: false,
  }
);

型号:


export const Session = sequelize.define(
  "session",
  {
    id: {
      type: DataTypes.UUID,
      defaultValue: sequelize.literal("(UUID())"),
      primaryKey: true,
    },
    created_at: {
      type: DataTypes.DATE,
      defaultValue: sequelize.literal("NOW()"),
    },
    updated_at: {
      type: DataTypes.DATE,
      defaultValue: sequelize.literal("NOW()"),
    },
  },
  {
    timestamps: false,
    underscored: true,
    freezeTableName: true,
  }
);
node.js sequelize.js
1个回答
0
投票

当您使用sequelize.literal定义默认值时,Sequelize将它们视为文字字符串,并且不会在JavaScript环境中执行UUID()或NOW()等函数。当插入记录时,这些函数的实际执行发生在数据库级别。

您应该使用 defaultValue 属性和函数来动态生成值。尝试这样的事情,

export const Session = sequelize.define(
  "session",
  {
    id: {
      type: DataTypes.UUID,
      defaultValue: DataTypes.UUIDV4,
      primaryKey: true,
    },
    created_at: {
      type: DataTypes.DATE,
      defaultValue: DataTypes.NOW,
    },
    updated_at: {
      type: DataTypes.DATE,
      defaultValue: DataTypes.NOW,
    },
  },
  {
    timestamps: false,
    underscored: true,
    freezeTableName: true,
  }
)
© www.soinside.com 2019 - 2024. All rights reserved.