【问题标题】:Saving JSON object in sequelize在 sequelize 中保存 JSON 对象
【发布时间】:2020-06-12 23:38:39
【问题描述】:

我正在尝试将客户端发送的 json 对象保存在数据库中
该应用程序可以很好地处理请求,但是在将请求数据保存在数据库中时我被卡住了,我正在使用 sequelize。 这是我的模型:

调度模型

module.exports = (sequelize, DataTypes) => {
  const Schedules = sequelize.define('Schedules', {
    name: DataTypes.STRING,
    delay: DataTypes.INTEGER,
    criteria: DataTypes.STRING
  }, {})
  Schedules.associate = (models) => {
    Schedules.hasMany(models.Commands)
  }
  return Schedules
}

和命令模型

module.exports = (sequelize, DataTypes) => {
    const Commands = sequelize.define('Commands', {
        command: DataTypes.STRING,
        index: DataTypes.INTEGER
    },{})
    Commands.associate = (models) => {
        Commands.belongsTo(models.Schedules)
    }
    return Commands
}

最后是收到的请求json对象

{
    "name": "Do Something",
    "commands": [
        "step one",
        "step two",
        "step three"
    ]
}

我还需要确保在查询计划时,它应按该顺序返回 commands[] 数组。 我的问题是,我怎么能在续集中这样做,任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: node.js express sequelize.js sequelize-cli


    【解决方案1】:

    首先,您需要将这些续集模型导入您想要使用它们的文件中:

    const schedulesModel = require(path to your defined model Schedules)
    const commands = require(path to your defined model Commands )
    

    假设您有一个用于 POST 操作的端点:

    exports.createSchedulesAndCommands = **async** (req, res, next) => {
    

    你需要先创建一个“父”对象:

    const schedule = await schedulesModel.create({name: parse.body.name});
    

    然后迭代到数组的每个元素,并基于计划对象(刚刚创建)续集当前的“魔术”方法,这些方法具有 sintax createAssociatedModelName。

    await Promise.all(
          parse.body.commands.map(async command => {
            await schedule.createCommands({command: command});
          })
        );
    

    您可能需要考虑检查关联的 sequelize 文档: https://sequelize.org/master/manual/assocs.html 希望这可以帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      相关资源
      最近更新 更多