在池连接上进行循环时出现内存问题

时间:2019-04-04 14:26:09

标签: javascript connection-pooling

我正在尝试从数据库中选择数据,并将其放入数组变量中,然后通过res.render发送到ejs页面,但是我目前仍停留在代码中。代码运行正常,没有问题,但是页面未重定向。

我试图将res.render放在for循环之外,并刷新页面几次。结果显示在页面上,但有些延迟。

我有2个涉及此代码的文件

第一个是Car.js,它创建一个查询函数以选择数据库中的数据。

exports.getAllPlateNumber = function(connection,username,Callback) {
  var returnedValue  = [];
  var request = new Request(
    'SELECT PlateNumber FROM dbo.Car WHERE Username = @username',
    function(err, rowCount, rows) {
      if (err) {
        console.log(err);
        connection.release();
        returnedValue = null;
      } else {
        connection.release();
        return Callback(returnedValue);
      }
    });
    request.addParameter('username',TYPES.VarChar,username);
    request.on('row', function (columns) {
        columns.forEach(function(column) {
            returnedValue.push(column.value);
        });
    });
    connection.execSql(request);
}
exports.getCarModel = function(connection,platenumber, username,Callback) {
  var returnedValue  = [];
  var request = new Request(
    'SELECT CarModel FROM dbo.Car WHERE Username = @username AND PlateNumber = @platenumber',
    function(err, rowCount, rows) {
      if (err) {
        console.log(err);
        connection.release();
        returnedValue = null;
      } else {
        connection.release();
        return Callback(returnedValue[0]);
      }
    });
    request.addParameter('username',TYPES.VarChar,username);
    request.addParameter('platenumber',TYPES.VarChar,platenumber);
    request.on('row', function (columns) {
        columns.forEach(function(column) {
            returnedValue.push(column.value);
        });
    });
    connection.execSql(request);
}

第二个是Index.js,它将数据传递到ejs页面。

app.get('/home',loggedIn, function(req, res){
    pool.acquire(function (err, connection) {
      if (err) {
        console.error(err);
        connection.release();
      }
      car.getAllPlateNumber(connection,req.user[0],function(data){
        currentPlateNumber = data;
      })
    });

    // pool error memory
    for(var i = 0;i<currentPlateNumber.length;i++){
      pool.acquire(function (err, connection) {
        if (err) {
          console.error(err);
          connection.release();
        }
        car.getCarModel(connection,currentPlateNumber[i],req.user[0],function(data){
          currentModel[i] = data;
          if(i == currentPlateNumber.length){
            res.render('home', {currentModel:currentModel,currentPlateNumber: currentPlateNumber,currentUsername: req.user[0],currentPicture: currentPicture});
          }
        });
      });
    }
});

在home.ejs页面上,我显示currentModel数据以查看结果

      <h3><Strong>Car Model : <%= currentModel %></Strong></h3>

从结果中我期望得到的是将currentModel变量填充为我从数据库中查询到的汽车模型的数组。

0 个答案:

没有答案