Возвращение полного списка после поста в sequelize - PullRequest
0 голосов
/ 23 мая 2018

Я использую Sequelize ORM и хочу сделать почтовый запрос, чтобы создать то, что я называю «картой».Например, тело почтового запроса будет выглядеть следующим образом:

{
    "card": {"title": "cardTitle", "link": "cardLink", "categoryId": 1, "userId": 1},
    "tags": [{"title": "tagA", "userId": 1}, {"title": "tagB", "userId": 1}, {"title": "tagC", "userId": 1}]
}

После создания этого сообщения (в функции создания) я хочу, чтобы был возвращен полный список карточек, как показано нафункция спискаЯ не уверен, как это сделать, тем более что я перебираю каждую отдельную карту, чтобы создать соединение am: m.Пожалуйста, смотрите контроллер ниже.Спасибо!

const Card = require('../models').card;
const Tag = require('../models').tag;
const CardTag = require('../models').card_tag;
const Category = require('../models').category;

module.exports = {
  create(req, res) {
    Promise.all([
      Card.create(
        {
          title: req.body.card.title,
          link: req.body.card.link,
          categoryId: req.body.card.categoryId,
          userId: req.body.card.userId
        },
        {returning: true}
      ),
      Tag.bulkCreate(req.body.tags, {returning: true})
    ])
      .then(([Card, Tag]) =>
        Tag.map(tag =>
          CardTag.create({cardId: Card.id, tagId: tag.id})
        ),
        // How do I instead list all the Cards, just like I do in the list function below?
        res.status(201).send({message: "Card created"})
      )
      .catch(error => res.status(400).send(error));
  },
  list(req, res) {
    return Card
      .findAll({
        attributes: ['id', 'title', 'link', 'createdAt', 'updatedAt'],
        include: [
          {model: Category, attributes: ['title']},
          {model: Tag, as: 'tag', attributes: ['title'], through: {attributes: []}}
      ]})
      .then(cards => res.status(200).send(cards))
      .catch(error => res.status(400).send(error));
  }
};

Модели:

карта:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Card = sequelize.define('card', {
    title: {
      type: DataTypes.STRING,
      allowNull: false
    },
    link: {
      type: DataTypes.STRING,
      allowNull: false
    },
    categoryId: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    userId: {
      type: DataTypes.INTEGER,
      allowNull: false
    }
  });

  Card.associate = (models) => {
    Card.belongsToMany(models.tag, {through: 'card_tag', as: 'tag'});
    Card.belongsTo(models.category);
    Card.belongsTo(models.user);
  };

  return Card;
};

card_tag:

'use strict';
module.exports = function(sequelize, DataTypes) {
  const CardTag = sequelize.define('card_tag', {
    cardId: DataTypes.INTEGER,
    tagId: DataTypes.INTEGER
  });

  return CardTag;
};

категория:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Category = sequelize.define('category', {
    title: {
      type: DataTypes.STRING,
      allowNull: false
    }
  });

  Category.associate = (models) => {
  };

  return Category;
};

тег:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Tag = sequelize.define('tag', {
    title: {
      type: DataTypes.STRING,
      allowNull: false
    },
    userId: {
      type: DataTypes.INTEGER,
      allowNull: false
    }
  });

  Tag.associate = (models) => {
    Tag.belongsToMany(models.card, { through: 'card_tag', as: 'card'});
    Tag.belongsTo(models.user);
  };

  return Tag;
};
...