Pregunta

Tengo un servidor Node.js con Express y Jade ejecutándose.En una solicitud HTTP, el servidor ejecutará la siguiente función:

function home(req, res) {

  res.render("site/index", {recordset: recordset}); //render the Jade template
}

Ahora me gustaría pasar una matriz a la variable de conjunto de registros anterior que puedo recorrer en Jade para completar un menú desplegable en mi página html.Recuperé la matriz deseada de esta manera:

function runSQLSelect() {
      sql.connect(config.db, function(err) {
      var request = new sql.Request();
      request.query("select MyColumn FROM MyTable", function(err, recordset) {
        console.log(recordset);
        });
      });
}

¿Cuál es una forma adecuada de ejecutar de forma asincrónica la consulta SQL y pasar el resultado posterior a mi plantilla Jade?

¿Fue útil?

Solución

Tendrá res.render en la devolución de llamada de la consulta.

function runSQLSelect(callback) {
      sql.connect(config.db, function(err) {
      var request = new sql.Request();
      request.query("select MyColumn FROM MyTable", function(err, recordset) {
        console.log(recordset);
        callback(recordset);
        });
      });
}

function home(req, res) {
  runQSQLSelect( function(result) {
      res.render("site/index", {recordset: result}); //render the Jade template
  });
}

Tenga en cuenta que es posible que desee invocar su devolución de llamada de forma asíncrona, utilizando setImmediate, también podría considerar que su devolución de llamada runSQLSelect utilice la práctica de nodo estándar de aceptar dos parámetros callback(err,data).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top