Node.js Nodejs:TypeError:无法读取属性';行';未定义哈希密码的定义

Node.js Nodejs:TypeError:无法读取属性';行';未定义哈希密码的定义,node.js,bcrypt,Node.js,Bcrypt,我正在尝试在我的注册中对密码进行哈希运算,起初当我没有哈希代码时,代码可以工作,但当我添加哈希代码功能时,我收到了此错误,请检查下图 async function postUser(req, res, next){ params = req.body;//post let validation_rules = { email: 'email|required', firstname: 'required', lastname: 'r

我正在尝试在我的注册中对密码进行哈希运算,起初当我没有哈希代码时,代码可以工作,但当我添加哈希代码功能时,我收到了此错误,请检查下图

async function postUser(req, res, next){
    params = req.body;//post
    let validation_rules = {
        email: 'email|required',
        firstname: 'required',
        lastname: 'required',
        middlename: 'required',
        position: 'required',
        departmentid: 'required|integer',
        phonenumber: 'required',
        whatyoudo: 'required',
        password: 'required|confirmed|min:8',
    };

    let validation = new Validator(params, validation_rules);
    console.log("params", params);

    if(validation.passes())
    {
        try
        {   
            params.profilephotourl = "photourlsoon";
            let results = await user.newUser(params);

            res.status(200).json(results.rows);
        }catch(err){
            console.log("-----result data error-----\n", err);
            res.status(500).json(err);
        }
    }else{
        res.status(400).json(validation.errors);
    }
}
//

错误


错误发生在调用
bcrypt.hash
函数时使用回调,因为函数
newUser
返回预期的
undefined

这里介绍如何重写函数

exports.newUser = async function(data) {
    try {
        return bcrypt.hash(data.password, saltRounds).then((hash) => {
          let sql = 'CALL "'+config.DBSchemaAAM+'"."sp_Users_insert"(\''+data.email+'\', \''+data.lastname+'\',\''+data.firstname+'\',\''+data.middlename+'\',\''+data.profilephotourl+'\', \''+data.position+'\', \''+data.whatyoudo+'\',\''+data.phonenumber+'\', '+data.departmentid+', \''+hash+'\')';
          console.log(sql);

          return pool.query(sql,)
                         .catch((err) => { return console.error('---Error executing query---\n', err.stack) });  
        });
    } catch(err) { return console.error(err); } 
}
同样与这个问题无关,但值得一提的是,您不应该只将从用户那里收到的数据放入SQL查询,您应该使用准备好的语句,否则您可能会受到SQL注入的攻击

TypeError: Cannot read property 'rows' of undefined
exports.newUser = async function(data) {
    try {
        return bcrypt.hash(data.password, saltRounds).then((hash) => {
          let sql = 'CALL "'+config.DBSchemaAAM+'"."sp_Users_insert"(\''+data.email+'\', \''+data.lastname+'\',\''+data.firstname+'\',\''+data.middlename+'\',\''+data.profilephotourl+'\', \''+data.position+'\', \''+data.whatyoudo+'\',\''+data.phonenumber+'\', '+data.departmentid+', \''+hash+'\')';
          console.log(sql);

          return pool.query(sql,)
                         .catch((err) => { return console.error('---Error executing query---\n', err.stack) });  
        });
    } catch(err) { return console.error(err); } 
}