【问题标题】:Why is rows(callback) function from db.all returning undefined while rows is defined?为什么定义行时来自 db.all 的行(回调)函数返回未定义?
【发布时间】:2019-08-27 17:53:14
【问题描述】:

我正在调用一个函数来查看电子邮件地址是否在数据库中。它是一个空数组或填充数组。每当我返回这个值时,它都是未定义的。我该如何解决这个问题?提前致谢!

我尝试过使用 next() 和 promises。

调用db查询函数的函数。

    const emailExists = async function(req,res,next){
        let emailInDb = await usermodel.getOneByEmail(req, next);
        console.log(emailInDb);
       if(emailInDb.length !==0){
        res.send('email already in use!');
       }
       else{
         return next();
        }
    };

数据库查询。

    const getOneByEmail = function (req, next){
        let db = new sqlite3.Database(dbPath, (err) => {
        if (err) {
            console.error(err.message);
            }
        console.log('Connected to books db.');
         });

        db.all(`SELECT * FROM users WHERE email = ?`, [req.body.email], 
        (err, rows) => {
             console.log(rows);
             return rows;
         });
     };

console.log(emailInDb) 未定义。 虽然 console.log(rows) 给出了一个带有结果的数组。

【问题讨论】:

    标签: javascript node.js sqlite


    【解决方案1】:

    await 放在非异步函数前面不会神奇地使函数等待数据库调用解决。您需要将 db-calls 包装在一个 Promise 中,例如:

     const getOneByEmail = (req, next) => {
    
        return new Promise((resolve, reject) => {
            let db = new sqlite3.Database(dbPath, (err) => {
                if (err) {
                    console.error(err.message);
                    reject(err);
                }
                console.log('Connected to books db.');           
            });
            db.all(`SELECT * FROM users WHERE email = ?`, [req.body.email],
                (err, rows) => {
                    // TODO: check for error here and reject
                    console.log(rows);
                    resolve(rows);
                });
        });
    };
    

    请注意,您不应该每次调用 getOneByEmail 时都连接到数据库,而是重用连接...

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      相关资源
      最近更新 更多