在 node.js 中尝试捕获设置

七月333

我正在尝试为以下场景第一次设置try-catch目前,我有一个内部的路线,在server.js,如果有一个不赶错误从未来的控制器,这是user.js的

我也怀疑我是否需要/可以为控制器设置一个 try-catch 。

请帮我正确设置。

服务器.js:

 app.post('/login-user', (req, res) => {
        try {
            user.loginUser(req.body, (err, jResult) => {
                let token = jwt.sign({
                    user: jResult,
                }, "supersecret")
                console.log(jResult)
                return res.send(token)
            })
        } catch (err) {
            console.log(err)
            return res.send(jResult)
        }        
    })

用户.js:

user.loginUser = (jUserData, fCallback) => {
    var aData = [
        jUserData.email,
        jUserData.mobile_number,
        1
    ]
    var sQuery = 'SELECT * FROM users WHERE email = ? AND mobile_number = ? AND active = ?'
    db.each(sQuery, aData, function (err, jRow) {
        console.log(jRow)
        if (err) {
            console.log('BAD, user not logged in')
            return fCallback(true, {
                status: "INTERNAL SERVER ERROR"
            })
        }
        if (!Object.keys(jRow).length) {
            console.log('NOT FOUND')
            return fCallback(true, {
                status: "NOT FOUND"
            })
        }
        console.log('GREAT, user logged in')
        return fCallback(false, jRow)
        console.log(jRow)
    })
}
特里·伦诺克斯

这不会像你想象的那样工作......在你的 app.post('/login-user', handler, the try.. catch 块不会捕获错误,因为回调将被异步调用。最好的这里处理错误的方法是 Node.js 中的一种常见模式。如果在 loginUser 函数中出现错误,请将 err 变量设置为某个值。例如

user.loginUser = (jUserData, fCallback) => {
    var aData = [
        jUserData.email,
        jUserData.mobile_number,
        1
    ]
    var sQuery = 'SELECT * FROM users WHERE email = ? AND mobile_number = ? AND active = ?'
    db.each(sQuery, aData, function (err, jRow) {
        console.log(jRow)
        if (err) {
            console.log('BAD, user not logged in')
            return fCallback(new Error('BAD, user not logged in: ' + err.message), {
            status: "INTERNAL SERVER ERROR"
            });
        }
        if (!Object.keys(jRow).length) {
            console.log('NOT FOUND')
            return fCallback(new Error('User not found'), {
            status: "INTERNAL SERVER ERROR"
            });
        }
        console.log('GREAT, user logged in')
        return fCallback(false, jRow)
        console.log(jRow)
    })
}

然后在 app.post 处理程序中检查 err 变量是否为非空:

 app.post('/login-user', (req, res) => {
    user.loginUser(req.body, (err, jResult) => {
        if (err) {
            console.error(err.message);
            return res.status(500).send('Internal server error');
        }
        let token = jwt.sign({
            user: jResult,
        }, "supersecret")
        console.log(jResult)
        return res.send(token)
    })    
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章