Я пытаюсь создать новые строки в базе данных, используя Sequalize ORM.Я получаю массив коллекций от req.query.collections
.Для каждой из этих коллекций мне нужно создать новый userCollection
.Если не было создано ни одного userCollection
s, я хочу ответить внутренней ошибкой сервера (строка 41), в противном случае вернуть массив объектов с вновь созданным userCollections
.
Проблема в том, что я продолжаю получать внутренний серверошибка при выполнении тестовых запросов от Почтальона.Когда я проверяю свою базу данных, я вижу, что эти userCollections
были созданы, поэтому ошибки не было.
Я знаю, почему это происходит: потому что userCollection.build({ stuff }).save()
возвращает обещание.Поэтому, когда я пытаюсь выполнить console.log userCollections
из оператора .then()
, я получаю массив с недавно созданными коллекциями, как и должен был.Но к тому времени сервер уже ответил внутренней ошибкой сервера.
Вот мой код функции:
exports.addCollections = async (req, res, next) => {
const libraryId = req.params.libraryId;
const collections = req.query.collections;
if (!collections)
next(Boom.forbidden());
const userCollections = [];
collections.forEach(async (collectionId, index) => {
const collection = await Collection.findByPk(collectionId);
if (!collection)
return next(Boom.notFound());
userCollection.build({
user_id: req.user.id,
library_id: libraryId,
public_collection_id: collection.id,
title: collection.title,
description: collection.description
})
.save()
.then(newUserCollection => {
userCollections.push(newUserCollection.get({ plain: true }));
// should be printed first, but comes second
// prints out the array with newly created record
console.log(userCollections);
})
.catch(error => {
console.log(error);
});
});
// should be printed second, but comes first
// prints out empty array
console.log(userCollections);
if (userCollections.length === 0) {
next(Boom.internal());
}
res.json(userCollections);
}