Сохранение JSON объекта в дальнейшем - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь сохранить объект json, отправленный клиентом, в базе данных
Приложение может обрабатывать запросы очень хорошо, но я застрял, когда дело доходит до сохранения данных запроса в базе данных, Я использую продолжение. Вот мои модели:

Модель расписания

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 [] в указанном порядке. Мой вопрос, как я могу сделать это в дальнейшем, Любая помощь приветствуется. Спасибо

1 Ответ

0 голосов
/ 29 февраля 2020

Во-первых, вам нужно импортировать те модели сиквелизов в файл, в который вы хотите работать с ними:

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});

, а затем выполнить итерацию к каждому элементу массива и на основе запланированного объекта (только что созданного) продолжить существующие методы «magi c», которые имеют синтаксис createAssociatedModelName .

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

Возможно, вы захотите проверить документацию сиквела, созданного для ассоциаций: https://sequelize.org/master/manual/assocs.html Надеюсь, это поможет.

...