Я использую 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;
};