【问题标题】:NODE JS | MS API facing issues while multiple connection connected to API节点JS |多个连接连接到 API 时 MS API 面临问题
【发布时间】:2019-01-23 01:02:56
【问题描述】:

我只是想尽可能清楚,所以我有一个 MS SQL nodejs API,通过它我与我的 android 和桌面应用程序进行交互。目前它工作正常,但它不在池连接上。我认为这就是为什么当更多人使用我的应用程序时,它只是没有给出响应,而是给出了更多 LIKE 的错误

连接已经存在 先关闭 SQL.close()

所以我计划将我的 API 升级为池连接,这意味着更多人可以同时连接到我的 API。正确的?

所以我有这个与数据库代码的连接,它的连接和查询如下所示:

连接var dbConfig = { user: 'sa', password: "pmis13", server: '19', database: 'CUBES_HO', };

查询处理程序:

function executeQuery(query) {
return new Promise((resolve, reject) => {
    sql.connect(dbConfig, function (err) {
        if (err) {
            reject(err);
            sql.close();
        } else {
            // create Request object
            var request = new sql.Request();
            // query to the database and get the records
            request.query(query, function (err, data) {
                if (err) {
                    reject(err);
                    sql.close();
                } else {
                    resolve(data);
                    sql.close();
                }
            });
        }
    });
});}

查询看起来像这样:

app.get("/dailysale/:date", function (req, res) {
var query = "SELECT SUM(bill_amt) AS totalSale FROM [CUBES_HO].[dbo].[vw_bill_summary] where inv_loc_key = 2 and  bill_sale_date =  '"+req.params.date+"'";
executeQuery(query)
    .then((data) => {
        res.status(200).send({ "msg": "Records fetched", "data": data.recordsets });
    }).catch((err) => {
        res.status(500).json({ "msg": err.message });
    });});

我想转换它,或者我们可以说将此 api 升级为池连接,这对于多个连接来说听起来更可靠。纠正我我错了。

【问题讨论】:

  • 这取决于您的应用程序的可扩展性。但是创建池连接总是更适合执行此类查询。
  • 这正是我在想的,你能指导我吗?我有很多这样的查询,我想切换到池连接,有什么方法可以使用与它相同的模式并将其用作池连接,我喜欢这样的数千个查询。我该怎么办?
  • 我通常不会像 5 out 100 次那样从服务器获得响应。它说关闭连接和东西

标签: javascript node.js


【解决方案1】:

我无法将此链接放在 cmets 部分,因此将其发布在这里。 This SO 上的答案解释了 mysql.createConnection 和 mysql.createPool 之间的区别。

帮助您创建池连接的示例

const pool = new sql.ConnectionPool({
user: '...',
password: '...',
server: 'localhost',
database: '...'
})

找到它here

【讨论】:

  • 其实我不需要理由,只需要方法。
【解决方案2】:

我通过这样做找到了一个工作 arround

    var config     ={
    user: 'sa',
    password: "pdt09",
    server: '3',
    database: 'CUBES',
    options: {encrypt: true}  
  };

 async function executeQuery(sqlquery) {
return new Promise(function(resolve, reject) {
(async() => {
  const pool = new sql.ConnectionPool(config);
  pool.on('error', err => {
    // ... error handler 
    console.log('sql errors', err);
  });

  try {


    await pool.connect();
    let data = await pool.request().query(sqlquery);

  resolve(data);

  } catch (err) { 
    reject(err)
  } finally {
    pool.close(); //closing connection after request is finished.
  }
})(); 
}).catch(function(err) {

});

}

工人将保持不变

【讨论】:

    猜你喜欢
    • 2022-11-04
    • 2013-04-26
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2011-06-12
    • 2016-12-13
    相关资源
    最近更新 更多