Node.js NodeJs和db返回值

Node.js NodeJs和db返回值,node.js,sequelize.js,Node.js,Sequelize.js,我是nodejs的新手,我试着写我的第一个nodejs webapp 我想从数据库中读取数据并在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.

我是nodejs的新手,我试着写我的第一个nodejs webapp 我想从数据库中读取数据并在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});
})

为什么在街区之后

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

});

console.log("rubrica:", filtrati);
变量filteri从块中删除

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

});
是空的吗? 第一个控制台。logrubrica:,Filteri; 打印json文件,第二个文件不可用 我怎么了?
如何返回查询结果集?

这在JavaScript中非常常见。您必须在.findAll回调中调用render。您不能从回调返回值

例如:

Persona.findAll({}).then(persona => {
  // DO YOUR STUFF
  res.render(....);
});
或者,既然这是一个承诺,你可以像这样等待它:

const data = await Persona.findAll({});
console.log(data);
记住:


要等待函数,它必须返回一个承诺,并且作用域也必须是异步的。Google JS promise async/await了解详细信息。

这里是一个获取记录并迭代所有记录的解决方案

 let getAllParsonas = async ( req, res, next ) {
   try {
    let foundParsonas = await persona.findAll({});
    if ( foundParsonas ) {
        res.send({'personas':foundParsonas });
        // if you want to ittrate over each record
        foundParsonas.map(pElem => {
          console.log(pElem); // each element from that record array will be display here
           // you can also implement other logic or parse data against keys here. 
        });
      }

    } catch ( err ) {
     console.log(err);
    } 
  };

当只有8条记录要显示时,我尝试第一种方法和web页面循环来呈现3996条记录。该页没有数据。如果我尝试第二种方法const filtari=wait Persona.findAll;控制台。logrubrica:,过滤;Persona分号附近有一个错误预期JavaScript问题这可能是因为您没有正确迭代。Persona.findAll是异步的,因此node.js执行它并继续运行到console.log,甚至在findAll返回任何内容之前,因此filteri是未定义的。在.then块内部,保证等待findAll完成,该findAll具有persona和filtari的值。Google node.js异步主题