Pergunta

Eu tenho um servidor Node.js com Express e Jade em execução.Em uma solicitação HTTP, o servidor executará a seguinte função:

function home(req, res) {

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

Agora eu gostaria de passar um array para a variável do conjunto de registros acima, que eu possa percorrer no Jade para preencher um menu suspenso na minha página html.Eu recuperei o array desejado assim:

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);
        });
      });
}

Qual é a maneira correta de executar a consulta SQL de forma assíncrona e passar o resultado subsequente para meu modelo Jade?

Foi útil?

Solução

Você terá o res.render no retorno de chamada da 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
  });
}

Observe que você pode querer que seu retorno de chamada seja invocado de forma assíncrona, usando setImmediate, você também pode considerar fazer com que seu retorno de chamada runSQLSelect use a prática padrão do nó de aceitar dois parâmetros callback(err,data).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top