Como renderizo valores de retorno de uma instrução node-mssql com Jade?
-
02-01-2020 - |
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?
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)
.