Как обновить модель?.updateAttributes не является функцией - PullRequest
0 голосов
/ 24 мая 2018

Я создаю приложение Node Express с Postgres как DB и Sequelize как ORM.

У меня есть файл router.js:

router.route('/publish')
  .put((...args) => controller.publish(...args));

controller.js, который выглядит какэто:

publish(req, res, next) {
  helper.publish(req)
  .then((published) => {
    res.send({ success: true, published });
  });
}

И helper.js

publish(req) {
  return new Promise((resolve, reject) => {
    Article.findAll({
      where: { id: req.query.article_id },
      attributes: ['id', 'state']
    })
    .then((updateState) => {
      updateState.updateAttributes({
        state: 2
      });
    })
    .then((updateState) => {
      resolve(updateState);
    });
  });
}

Так, например, когда я нажимаю PUT http://localhost:8080/api/publish?article_id=3555, я должен получить:

{
  "success": true,
  "published": [
    {
      "id": 3555,
      "state": 2
    }
  ]
}

Текущийсостояние статьи: 1.

Однако я получаю следующую ошибку Unhandled rejection TypeError: updateState.updateAttributes is not a function.Когда я удаляю часть updateState.updateAttributes из моего helper.js, я получаю ответ с текущим состоянием.

Как правильно обновить состояние статьи?

1 Ответ

0 голосов
/ 24 мая 2018

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

Article.fineOne({  //<--------- Change here
    where: { id: req.query.article_id },
    attributes: ['id', 'state']
})
.then((updateState) => {
    updateState.updateAttributes({state: 2}); //<------- And this will work
})

Но если вы все еще хотите использовать findAll изнаете, как это использовать, пожалуйста, попробуйте это и прочитайте комментарии, которые очистят все ваши сомнения:

Article.findAll({
    where: { id: req.query.article_id },
    attributes: ['id', 'state']
})
.then((updateState) => {
    // updateState will be the array of articles objects 
    updateState.forEach((article) => {
        article.updateAttributes({ state: 2 });
    });

    //-------------- OR -----------------
    updateState.forEach((article) => {
        article.update({ state: 2 });
    });
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...