Проблема с памятью при выполнении цикла for при подключении к пулу - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь выбрать данные из базы данных, поместить их в переменную массива и отправить на страницу ejs с помощью res.render, но в настоящее время я застрял с кодом.Код работает без проблем, но страница не перенаправляется.

Я пытался поместить 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 массивом модели автомобиля, к которому у меня есть запрос из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...