【问题标题】:Sails.js Can't create data in another model from other model's lifecycleSails.js 无法从其他模型的生命周期中创建另一个模型中的数据
【发布时间】:2019-09-20 10:35:38
【问题描述】:

嘿,我对 Sails 有点陌生。我已经在sails 中启用了REST api,不,我只是简单地使用发布请求主体的主体创建数据,而无需控制器的干预。 我已经定义了两个模型——用户和 call_log。每次在我的应用程序中发生事件时,我希望它触发用户表中用户值的更改,但我还想在呼叫日志表中创建一个日志。 我正在使用afterCreate() 生命周期方法并尝试使用create() 将我的数据写入第二个表。我似乎没有收到任何错误,但没有向 dB 写入任何内容。

我的 User.js(模型)

module.exports = {

  attributes: {

    username: {type: 'string', required: true},
    country: {type: 'string'},

  },

  afterCreate: function (valuesToSet, proceed) {
    Talk_log.create({
      uid: 'myuid',
      partner_uid: 'mypartnerid',
      action: 'yeahhh'
    }).fetch();
    valuesToSet.password = 1244;
    return proceed();
  },


};

我的 Talk_log.js

module.exports = {

  attributes: {

    uid: { type: 'string', required: true},
    partner_uid: {type: 'string'},
    action: {type: 'string'}

  },

};

【问题讨论】:

    标签: mysql sails.js


    【解决方案1】:

    Documentation 说“afterCreate 生命周期回调只会在 fetch 元标志设置为 true 的查询上运行”

    所以使用:

    User.create().fetch();
    

    Fetch 告诉 Waterline(和底层数据库适配器)在执行 .update()、.create()、.createEach() 或 .destroy() 查询时发回更新/销毁/创建的记录。

    你说 afterCreate() 但在你的代码中是 beforeCreate()。修复它。

    【讨论】:

    • 我已经编辑了您建议的更改,但仍然无法正常工作。
    • 你用什么版本的帆?你在 User.create 上使用了 fetch 吗?你可以显示控制器的代码吗?
    【解决方案2】:

    我忘记了处理 bluebird 承诺的 .then(),只有这样我才能写信给 dB。

    Talk_log.update({ uid: valuesToSet.uid})
      .set({ joined: true})
        .fetch()
          .then(() => {return proceed();});
    

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多