pg-обещание цепочки запросов для задачи и транзакций

1

Я видел задачи pg-prom и tx для повторного использования того же соединения, которое мы можем использовать

db.task(t => {
return t.one('SELECT id FROM Users WHERE name = $1', 'John')
    .then(user => {
        return t.any('SELECT * from Events WHERE userId = $1', user.id);
    });}).then(events => {// success
 }).catch(error => {
// error
});

Но что, если у меня есть два разных файла и например UsersModel.getUser (имя пользователя) и EvenModel.getUserEvent(userId). Есть ли способ передать объекты транзакции или задачи.

Спасибо

Для дальнейшей разработки у меня есть файл LoginController.js

function login(){
UsersModel.getUser(username).then((response)=>{
    return EventModel.getEvent(response.ID);
}).then((result)=>{
    res.send(result);
})

}

и если мы увидим реализацию getUser, это что-то вроде этого

export function getUser(username){

return db.any('SELECT id FROM Users WHERE name = $1', username);
}

Итак, как я должен рефакторировать, сохраняя UserModel и EventModel отдельно

Теги:
pg-promise

1 ответ

0

Рекомендуемый подход к созданию большого приложения базы данных с pg-обещанием хорошо изложен в pg-prom-demo.

Но если вы хотите сохранить свои традиционные модели данных, то для правильной работы модельных методов в задачах и транзакциях вам следует обновить свои методы следующим образом:

function getUser(username) {
    return db.oneOrNone('SELECT id FROM Users WHERE name = $1', username);
}

к этому:

function getUser(username, t) {
    t = t || db;
    return t.oneOrNone('SELECT id FROM Users WHERE name = $1', username);
}

А затем передайте ему дополнительный контекст задачи/транзакции, когда он доступен.

  • 0
    спасибо, я видел pg-demo, но в нем есть пользователи и продукты, которые не могут видеть транзакции или более сложные сценарии. Да, конечно, но я не смог его получить. спасибо за Ваш ответ
  • 0
    @ dev123 да, я думал о расширении, чтобы включить такие примеры. По сути, в этой архитектуре, находясь внутри задачи / транзакции, вы автоматически получаете доступ ко всем вашим методам репозитория, и в этом вся прелесть.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню