Node.js NodeJs和db返回值
我是nodejs的新手,我试着写我的第一个nodejs webapp 我想从数据库中读取数据并在html页面中显示数据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.
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异步主题