Saltar al contenido

¿Cómo devolver correctamente un resultado de mysql con Node?

Solución:

Necesitará familiarizarse con las llamadas asíncronas y las devoluciones de llamada con javascript, esto no es C #, PHP, etc.

Aquí tienes un ejemplo usando tu código:

function get_info(data, callback){
      
      var sql = "SELECT a from b where info = data";

      connection.query(sql, function(err, results){
            if (err){ 
              throw err;
            }
            console.log(results[0].objid); // good
            stuff_i_want = results[0].objid;  // Scope is larger than function

            return callback(results[0].objid);
    })
}


//usage

var stuff_i_want="";

 get_info(parm, function(result){
    stuff_i_want = result;

    //rest of your code goes in here
 });

Cuando usted llama get_info esto, a su vez, llama a connection.query, que recibe una devolución de llamada (eso es lo que function(err, results) es
Luego, el alcance se pasa a esta devolución de llamada, y así sucesivamente.

Bienvenido al infierno de devolución de llamada javascript …

Es fácil cuando aprendes a hacerlo, solo toma un poco de tiempo acostumbrarte, viniendo de algo como C #

Supongo que lo que realmente desea hacer aquí es devolver un objeto Promise con los resultados. De esta manera puede lidiar con la operación asincrónica de recuperar datos del DBMS: cuando tiene los resultados, hace uso de la Promesa resolver función para de alguna manera “devolver el valor” https://foroayuda.es/ “resolver la promesa”.

He aquí un ejemplo:

getEmployeeNames = function(){
  return new Promise(function(resolve, reject){
    connection.query(
        "SELECT Name, Surname FROM Employee", 
        function(err, rows){                                                
            if(rows === undefined){
                reject(new Error("Error rows is undefined"));
            }else{
                resolve(rows);
            }
        }
    )}
)}

En el lado de la persona que llama, usa el then función para gestionar el cumplimiento, y la catch función para gestionar el rechazo.

A continuación, se muestra un ejemplo que utiliza el código anterior:

getEmployeeNames()
.then(function(results){
  render(results)
})
.catch(function(err){
  console.log("Promise rejection error: "+err);
})

En este punto, puede configurar la vista para sus resultados (que de hecho se devuelven como una matriz de objetos):

render = function(results){ for (var i in results) console.log(results[i].Name) }

Editar
Estoy agregando un ejemplo básico sobre cómo devolver contenido HTML con los resultados, que es un escenario más típico para Node. Solo usa el then función de la promesa para establecer la respuesta HTTP, y abra su navegador en http: // localhost: 3001

require('http').createServer( function(req, res){
if(req.method == 'GET'){
    if(req.url == "https://foroayuda.es/"){
        res.setHeader('Content-type', 'text/html');
        getEmployeeNames()
        .then(function(results){
          html = "<h2>"+results.length+" employees found</h2>"
          html += "<ul>"
          for (var i in results) html += "<li>" + results[i].Name + " " +results[i].Surname + "</li>";
          html += "</ul>"
          res.end(html);
        })
        .catch(function(err){
          console.log("Promise rejection error: "+err);
          res.end("<h1>ERROR</h1>")
        })
    }
}
}).listen(3001)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *