节点mysql查询未从查询外部更新变量

时间:2019-04-19 16:36:22

标签: mysql node.js express

我正在尝试从此代码中获取返回值,但是没有运气。由于某种原因,我放入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 :(得分:0)

您正在尝试从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);
    }
  });
}

或使用Promiseasync/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块中的错误。