JavaScript 异步函数不返回预期值(NodeJS 应用程序)

问题描述 投票:0回答:0

我是 JavaScript(和回调)新手。 在我的 NodeJS 应用程序中,我创建了一个异步函数来从 SQL 数据库检索一些用户数据。 工作正常,该函数确实检索数据。 然后,我使用 BCrypt 检查用户提供的密码是否与用户的“appPassword”匹配。

这个工作也!!

但是,当密码匹配成功(或不成功)时,我尝试将 JSON 对象返回给调用函数。但调用函数中的“结果”始终是“未定义” 我不明白我在这里做错了什么。

JavaScript 专家可以帮忙吗?

我已经在下面发布了我的代码(异步函数和调用函数):

注意:调用函数中的“结果”始终是“未定义”

异步功能

异步函数VerifyUserByUsernamePassword(用户电子邮件,密码){

const sql = require('mssql')
const { configMSSQL } = require("./db.config.js");

if (sql) sql.close();

return await sql.connect(configMSSQL).then(async pool => {

    // Stored procedure
    let output_parameter
    return await pool.request()
        .input('Email', sql.NVarChar, userEmail)
        // .output('output_parameter', sql.Int)
        .execute('API_READ_USER_BY_EMAIL')

}).then(async result => {
    sql.close();
    // sql = null;
    if (result.recordset.length > 0) {

        const appPassword = result.recordset[0].appPassword;

        bcrypt.compare(password, appPassword, async function (err, result2) {
            if (err) {
                console.log(err);
                return ({
                    "message": "failed"
                })
            }
            if (!result2) {
                // console.log("result2", result2)
                return ({
                    "message": "failed"
                })
            }
            console.log("result2 was True")
            return ({
                "message": "success",
                "data": result
            })
        })

    } else {
        console.log("Error retrieving User Records for Login Verification......");
        return ({
            "message": "failed"
        })
    }

}).catch(err => {
    sql.close();
    // ... error checks
    console.log("Error retrieving User Records for Login Verification", err);
    return ({
        "message": "failed"
    });
});

}

通话功能

exports.VerifyLogin = async (req, res) => {

var errors = []

if (!req.body.email) {
    errors.push("Credentials Missing");
}
if (!req.body.password) {
    errors.push("Credentials Missing");
}

if (errors.length) {
    res.status(400).json({ "error": errors.join(",") });
    return;
}

var email = req.body.email
var password = req.body.password

const { VerifyUserByUsernamePassword } = require("../database/mssqldb.js");

await VerifyUserByUsernamePassword(email, password).then(async result => {

    if (result && result.message === "success") {

        res.json(result.data);

    } else {
        res.json({
            "message": "failed",
            "User Record ": email
        },);
    }

}).catch(err => {
    console.log(err);

    res.json({
        "message": "error",
        "User Record ": email
    },)
})

}

javascript node.js api callback
© www.soinside.com 2019 - 2024. All rights reserved.