postgresql Node.js c/await适当使用

xzlaal3s  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(152)

我对Node.js有点陌生,并试图了解如何正确使用Node.js。我有一个函数(在控制器中),它管理与数据库的连接并执行简单的查询(从表中选择 *)。所以我的问题是这两个代码中哪一个正确使用Node. js/await(都可以工作)?
代码1:

const drzaveLista = async (req, res) => {
    try{
        await pool.connect(async(err, client, done) => {
            if (err) throw err;
            await client.query("SELECT * FROM DRZAVE;", [], (err, result) => {
                done();
                if (err) throw err;
                res.render("drzave", {listaDrzava: result.rows});
            });
        });
    } catch (err) {
        console.log(err);
    }
};

字符串
代码2:

const drzaveLista = async (req, res) =>{
const client = await pool.connect();
try{
    const result = await client.query("SELECT * FROM DRZAVE;");
    res.render("drzave", {listaDrzava: result.rows});
} catch (err){
    console.log(`Greska ${err}`);
} finally {
    client.release();
}
};


P.S.如果这很重要,我使用PostgreSQL作为数据库。

2jcobegt

2jcobegt1#

使用asyncawait时不需要传递回调。
代码2是正确的用法,以及它实际上是如何完成的。
如果您不希望控制器是异步的,还有另一种机制。

const drzaveLista = (req, res) =>{
    const client = new Promise(async (resolve, reject) => { 
        await pool.connect().then(_client => resolve(_client)).catch(err => reject(err));
    });

    try{
        const result = new Promise(async (resolve, reject) => { 
            await client.query("SELECT * FROM DRZAVE;").then(_result => resolve(_result)).catch(err => reject(err));
        });
        res.render("drzave", {listaDrzava: result.rows});
    } catch (err){
        console.log(`Greska ${err}`);
    } finally {
        client.release();
    }
};

字符串

相关问题