【问题标题】:updatedAt column is not updated with latest datetime while sending a put request发送 put 请求时,updateAt 列未使用最新日期时间更新
【发布时间】:2020-10-19 02:14:19
【问题描述】:

发送put 请求时,dailystatus 列会单独更新数据,但updatedAt 列会留下而不更新最新日期/时间。发帖过程中,createdAt 和 updatedAt 列中自动插入了日期和时间,所以在发送 put req 时,我们是否需要发送指令来更新 updatedAt 列,如果需要怎么做?

//这是更新可用性表中的dailystatusupdatedAt列:

`server.js`

    app.put('/service/availability', async (req, res) => {
    
      try {
        const userEmail = req.query.email;
        const dailyStatus =  req.body.dailystatus;
        var selector = {
          where: { email: userEmail }
        };
        var updateData = {dailystatus:dailyStatus};
        const playerDailyStatus = await Availability.update(updateData, selector);
        res.status(200).json({ success: true });
      } catch (e) {
        res.status(500).json({ message: e.message });
      }
    });

Availability.js

    const onUpdate = (dailyinput) =>{
      console.log("Here Daily:"+ dailyinput);
      const dailyStatus = async () => {
          try {
              const params = {
                  email: loginUserEmail,
              };
            const res = await axios.put('http://localhost:8000/service/availability', { dailystatus: dailyinput }, {params} );
            console.log("Dailystatus update:" + res.data.success);
            if (res.data.success) {
              setDeleteDialog(false);
            }
            else {
              console.log(res.data.message);
              setHelperText(res.data.message);
            }
          } catch (e) {
            setHelperText(e.response.data.message);
          }
        }
        dailyStatus();
  }

availability.js型号

'use strict';
module.exports =  (sequelize, DataTypes) => {
    const availability = sequelize.define('availability', {
        email: {
            type: DataTypes.STRING(100),
            allowNull: false

        },
        dailystatus: {
            type: DataTypes.STRING(50),
            allowNull: false
        },
        user_id: {
            type: DataTypes.INTEGER(18)
        },
        id: {
            type: DataTypes.INTEGER(10),
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        createdAt: {
            type: DataTypes.DATE,
            allowNull: false,
            defaultValue: DataTypes.NOW
        },
        updatedAt: {
            type: DataTypes.DATE,
            allowNull: false,
            defaultValue: DataTypes.NOW
        }
    }, {
        timestamps: true,
        tableName: 'availability'
    });
    availability.associate = function (models) {
        // associations can be defined here
        availability.belongsTo(models.user, {
            foreignKey: 'user_id',
            sourceKey: 'id',
            onDelete: "CASCADE"
        });
    };
    return availability;
}

【问题讨论】:

  • 在表定义中使用默认的mysql行为on timestamp initialization
  • 好的,我也将我的availability.js模型添加到问题中,你能检查一下是否看起来不错。
  • 只处理创建时间。需要以某种方式合并“ON UPDATE”。

标签: mysql express axios sequelize.js


【解决方案1】:

手动添加

var updateData = {
    dailystatus: dailyStatus,
    updatedAt: new Date(),
  };

或者你可以像这样制作钩子:

'use strict';
module.exports =  (sequelize, DataTypes) => {
    const availability = sequelize.define('availability', {
        email: {
            type: DataTypes.STRING(100),
            allowNull: false

        },
        dailystatus: {
            type: DataTypes.STRING(50),
            allowNull: false
        },
        user_id: {
            type: DataTypes.INTEGER(18)
        },
        id: {
            type: DataTypes.INTEGER(10),
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        createdAt: {
            type: DataTypes.DATE,
            allowNull: false,
            defaultValue: DataTypes.NOW
        },
        updatedAt: {
            type: DataTypes.DATE,
            allowNull: false,
            defaultValue: DataTypes.NOW
        }
    }, hooks: {
           beforeUpdate: (availability, options) => {
               availability.updatedAt = new Date();
       },
    },{
         timestamps: true,
         tableName: 'availability'
    });
    availability.associate = function (models) {
        // associations can be defined here
        availability.belongsTo(models.user, {
            foreignKey: 'user_id',
            sourceKey: 'id',
            onDelete: "CASCADE"
        });
    };
    return availability;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2018-02-09
    相关资源
    最近更新 更多