Je suis plus gentil pour node js, j'essaie d'écrire ma première application web nodejs que je veux lire à partir de db et afficher les données dans la page html.

router.post("/filtra", function (req,res){
console.log("Hello I'm on the start page");

var criterioFiltro = {
    nominativo : req.body.nominativo,
    settore: req.body.settore
}

console.log(criterioFiltro);

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
})
    .catch(err => {
    console.error('Unable to connect to the database:', err);
});


var filtrati;
Persona.findAll().then(persona => {
    filtrati = JSON.stringify(persona, null, 4);
    console.log("rubrica:", filtrati);

});

console.log("rubrica:", filtrati);

/*
if (criterioFiltro.nominativo!= "" && criterioFiltro.settore != "")
{
    filtrati = where(where(rubrica.elencoTelefonico, {nominativo: criterioFiltro.nominativo}), {settore: criterioFiltro.settore}) ; 
}
else if (criterioFiltro.nominativo!= "")
{
    filtrati = where(rubrica.elencoTelefonico, {nominativo: criterioFiltro.nominativo});
}
else if (criterioFiltro.settore != "")
{
    filtrati = where(rubrica.elencoTelefonico, {settore: criterioFiltro.settore});
}
else
{
    filtrati = [];
}
*/


res.render("filtrati", {settori: settori, rubrica: filtrati});

});

pourquoi après le bloc

    var filtrati;
Persona.findAll().then(persona => {
    filtrati = JSON.stringify(persona, null, 4);
    console.log("rubrica:", filtrati);

});

console.log("rubrica:", filtrati);

la variable "filtrati" hors du bloc

    Persona.findAll().then(persona => {
    filtrati = JSON.stringify(persona, null, 4);
    console.log("rubrica:", filtrati);

});

est vide? le premier console.log ("rubrica:", filtrati); imprimer le fichier json, le second indisponible ce que je me trompe? que puis-je faire pour renvoyer le jeu de résultats de la requête?

Merci d'avance. Raffaele

0
Raffaele Fabbri 3 nov. 2019 à 18:58

1 réponse

Ceci est très courant en JavaScript. Vous devez appeler le rendu dans le rappel .findAll.

Exemple:

Persona.findall().then(persona => {
  // DO YOUR STUFF
  res.render(....);
});

Ou, puisque c'est une promesse, vous pouvez l'attendre comme ceci:

const data = await Persona.findall();
console.log(data);
0
Dijkstra 3 nov. 2019 à 16:02