Express.js:从未发送 try/catch 中的响应

Express.js: Reponse in catch of try/catch is never sent

我正在尝试使用 Express.js 和 mySQL 实现基本的用户注册流程。这是我目前的代码(为简洁起见,已删除):

register(app, db) {
        app.post('/register', (req, res) => {
            let email = req.body.email
            let password = req.body.password
            
            try {
                // add the user to the database
                var q_params = [email, bcrypt.hashSync(password, 9)]
                db.query("INSERT INTO users VALUES (?, ?)", q_params, (err) => {
                    if (err) {
                        throw err
                    }
                })
            } catch (err) {
                // respond with an error if one is encountered
                res.json({
                    success: false,
                    msg: err
                })
                return
            }

            // respond with success if everything else goes ok
            res.json({
                success: true,
                email: email
            })
        });
    }

问题是,无论 try 块中代码的结果如何,我总是得到 success: true。为什么永远不会触发错误响应?有没有更好的方法来处理这种情况?

我假设问题是什么都没有在等待 db.query() 函数完成执行。它不是异步的,也不是等待该函数解析。所以最后一个 res.json({}) 马上就被击中了。

我会尝试重写代码以使用承诺或使用传递给 .query() 的回调函数,可能是这样的:

app.post('/register', (req, res) => {
   let email = req.body.email
   let password = req.body.password      
     
   // add the user to the database
   var q_params = [email, bcrypt.hashSync(password, 9)]
   db.query("INSERT INTO users VALUES (?, ?)", q_params, (err) => {
       if (err) {
           return res.json({
              success: false,
              msg: err
           });
        }

        res.json({
           success: true,
           email: email
        });
   });

});