使用带有Sequelize的两个不同表一个接一个地运行查询(序列)

时间:2019-02-22 09:34:19

标签: javascript node.js postgresql promise sequelize.js

我有两个表,一个表用于具有用户名,密码和ID的用户,另一个表用于具有用户名和文件的用户操作。 一旦从session获得了userId,我将在user表中进行查询以了解用户的用户名。之后,我使用用户名并查询第二个表操作,在该操作中我想为所选用户检索文件名。

我使用sequelize,并且该表未与主键和外键连接,原因是我无法修改数据库的结构。因此,我的目标是按顺序运行查询。一旦第一个完成,第二个开始。 我将不胜感激。非常感谢。

 app.get("/dashboard", redirectLogin, (req, res) => {
 if (req.session.userId) {



 let  promise1= User.findOne({ where: { id: req.session.userId } })
 console.log('promise ' + promise1)

let userFound =  promise1.then(userFound =>{
    console.log( 'utente trovato 1 '+ userFound.username);


    Operations.findAll({where:{cliente:userFound.username}})
    .then(opFound => {
        console.log(opFound.filename); // return undefined
        return opFound.filename
        });

});



}
});

2 个答案:

答案 0 :(得分:0)

您可以使用async / await来等待它,这也会减少您的代码行。

 app.get("/dashboard", redirectLogin, async (req, res) => {  

 try {

    if (req.session.userId) {

      let userObj = await User.findOne({ where: { id: req.session.userId } })
      let opFound = await Operations.findAll({ where: { cliente: userObj.username } });
      console.log(opFound.filename)
      return opFound.filename;

          }  
    } catch (err) {
        return err;   
       } 
     });

答案 1 :(得分:0)

请尝试使用此代码段。

app.get("/dashboard", redirectLogin, (req, res) => {
        if (req.session.userId) {
           return User.findOne({ where: { id: req.session.userId } })
           .then((user) => {
                return Operations.findAll({where:{cliente:user.username}})
           })
           .then((opFound) => {
                console.log(opFound.filename); // return undefined
                return opFound.filename
           })
        }
    });