Запрос MySQL узла не обновляет переменную извне запроса - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь получить возвращаемое значение из этого кода без удачи. Все, что я помещаю в функцию запроса mysql, по какой-то причине становится неопределенным. Я непосредственно возвращаю значение изнутри запроса, получаю запрос, чтобы манипулировать значением переменной за его пределами и непосредственно назначаю его в переменную. У меня нет идей

1.)

connection.query(sql, response = (err,rows) => {
   if(row = condition){
     return something;
   }
}

2.)

var something
connection.query(sql, response = (err,rows) => {
   if(row = condition){
     something = somerow;
   }
}

3.)

var myvar =connection.query(sql, response = (err,rows) => {
   if(row = condition){
     return something;
   }
}

Ни одна из этих работ. Номер 3 возвращает какой-то бредовой JSON. Что я могу сделать? Также, это структура функции, если она поможет.

Модель:

exports.Something = () => {

    connection.query(sql, response = (err,rows) => {


     }

   return anything

}

Контроллер:

exports.Thing = (req,res) =>{
    var response = UserModel.Something();
    return res.send(response);
}

1 Ответ

0 голосов
/ 20 апреля 2019

Вы пытаетесь вернуть что-то из callback, что не работает.Вы можете использовать обратный вызов, например:

exports.Something = (callback) => {
  connection.query(sql, response = (err,rows) => {
    if (err) {
      callback(err)
    } else {
      callback(null, rows)
    }
  })
}

// In you controller
exports.Thing = (req,res) =>{
  var response = UserModel.Something((err, rows) => {
    if (err) {
      // handle error
      console.error(err)
    } else {
      res.send(rows);
    }
  });
}

или использовать Promise и async/await, например:

exports.Something = () => {
  return new Promise((resolve, reject) => {
    connection.query(sql, response = (err,rows) => {
      if (err) {
        reject(err)
      } else {
        resolve(rows)
      }
    })
  })
}

// In you controller
// make the middleware async function
exports.Thing = async (req,res) =>{
  try {
    var rows = await UserModel.Something()
    return res.send(rows);
  } catch (e) {
    // handle error
    console.error(e)
  }
}

С async/await вы обрабатываете ошибку в блоке try..catch.

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