nodejs - запрос блокировки Sailes.js (транзакции)

Дело:

Я создаю API с SAILS.js, Sails.js использует ватерлинию для ORM. API возвращает, скажем, фотографии, многие пользователи могут проголосовать за картинку. Фотографии будут упорядочены по количеству голосов.

Процедура: когда пользователь голосует за песню, я должен проверить количество голосов ("SELECT"|| picture.findById()), И после этого я должен увеличить это число на единицу ( картинка "ОБНОВЛЕНИЕ".обновление).

Проблема: транзакции/ блокировки в Sails.js, эти два запроса должны выполняться без другого запроса, изменяющего данные изображения в рамках запроса выбора и обновления нашей системы голосования.

Как мы должны выполнять блокировку/переход в парусах.js (инфраструктура узла js)

СПАСИБО


person user1345112    schedule 24.09.2013    source источник


Ответы (1)


Sails поддерживает транзакции.

Вот пример транзакции в Sailes.js:

await sails.getDatastore().transaction(async db=> {

  await Model
    .create({foo: bar})
    .usingConnection(db);

  if (somethingWentWrong) {
    throw 'error happened - transaction rollback';
  }

  await Model
    .update({id: 1}))
    .set({votes: 1})
    .usingConnection(db);

}).intercept('Error', () => res.serverError());
person Timofey Biryukov    schedule 04.06.2020