pg-promise查询任务和事务的查询

时间:2017-06-11 05:14:04

标签: javascript node.js postgresql pg-promise

我已经看过pg-promise任务和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(username)和EvenModel.getUserEvent(userId)。有没有办法可以传递事务或任务对象。

感谢

进一步详细说明我有一个File 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);
}

那么我应该如何重构以保持UsersModel和EventModel分开

1 个答案:

答案 0 :(得分:0)

pg-promise详细介绍了使用pg-promise-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);
}

然后在可用时传递可选的任务/事务上下文。

相关问题