具有连接池的Node.js MSSQL数据输入层

时间:2018-07-13 11:43:34

标签: sql-server node.js api express

此问题与 Node.js mssql API 有关。

我最近更新了我的代码,以使用 SQL.ConnectionPool 代替 sql.connect ,将其与async / await结合使用时函数使我能够解决 connection.close() 错误。

在我以前的( OLD executeQuery 函数中,我可以传递一个数组,该数组可以将值推入到以与“ request.input(名称,值)

函数调用示例:

app.get('/api/route/:id', function (req, res) {
var id = req.params.id;
let x = []
if (id != null && id != NaN) {
    x.push({
        Name: 'id', Value: id
    })
    var query = `SELECT * from [Table] where ID = @id`
    executeQuery(res, query, arr);
} else {
    res.send(500)
}

})

旧功能

var executeQuery = function (res, query, arr) {
sql.connect(dbConfig, function (err) {
    if (err) {
        console.log('Error while connecting to the database: ' + err)
        res.send(err)
    } else {
        // Create the request object
        var request = new sql.Request();
        if (arr != null) {
            if (arr.length > 0) {
                for (var obj of arr) {
                    request.input(obj.Name, obj.Value)
                }
            }
        }
        request.query(query, function (err, rs) {
            if (err) {
                sql.close();
                console.log('Error while querying the database : ' + err);
                res.send(err);
            } else {
                sql.close();
                console.log(rs)
                res.send(rs)
            }
        })
    }
})

}

新功能

var executeQuery = async function(res, query, arr){
const pool = new sql.ConnectionPool(dbConfig);
pool.on('error', err => {
    console.log('sql errors ', err);
});

try {
    await pool.connect();
    let result = await pool.request().query(query);
    console.log('success')
    res.send(result);
    return {success: result};
} catch (err) {
    console.log('error')
    console.log(err)
    res.send(err);
    return {err: err};
} finally {
    pool.close();
}

}

问题

如何使用ConnectionPool来实现与上一个功能(如下所示)相同的request.input过程

var request = new sql.Request();
    if (arr != null) {
        if (arr.length > 0) {
            for (var obj of arr) {
                request.input(obj.Name, obj.Value)
            }
        }
    }

谢谢。

0 个答案:

没有答案