节点js

时间:2016-06-30 05:27:55

标签: mysql node.js express

我尝试向db插入加密值,我可以加密无法在db中插入加密值的值。

app.post('/insert', function (req, res) {

    // var Fname=req.body.fname;
    // var Lname=req.body.pwd;

    var data = {
        Fname: req.body.fname,
        Lname: req.body.Lname
    };

    function hashP(getit, cb) {
        bcrypt.genSalt(15, function (err, salt) {
            if (err) {
                return console.log(err);
            }
            cb(salt);
            bcrypt.hash(getit, salt, function (err, gotit) {
                if (err) throw err;
                return this.cb(null, gotit);
            })
        })
    }

    hashP(data.Lname, function (err, gotit) {
        if (err) throw err;
        data.Lname = hash;
    })

    console.log(data.Lname);
    con.query("insert into test set ?", [data], function (err, rows) {
        if (err) throw err;
        res.send("Value has bee inserted");
    })
})

这是我的html表单页面:

<body>
<form action="http://localhost:8888/insert" method="POST" >
    <label>Name:</label><input type="text" name="fname"></br>
    <label>Lname:</label><input type="text" name="Lname"></br>
    <button type="submit">Submit</button>
</form>
</body>

1 个答案:

答案 0 :(得分:0)

好像你的函数hashP(getit,cb)在错误的时间调用cb函数似乎不是吗?尝试以下

function hashP(getit, cb){
        bcrypt.genSalt(15, function (err, salt){
            if(err) {
                return cb(err, null);
            }
            bcrypt.hash(getit, salt, function (err, hash){
                if(err) {
                    return cb(err, null);
                }
                return cb(null, hash);
            })
        })
    }

除此之外,您还需要在处理程序中调用它,如下所示:

app.post(...., function(req, res) {  

    var data = { ... }

    function hashP(data, cb){ ... }

    hashP(data.Lname, function (err, hash) {
      if (err) throw err;
      data.Lname = hash;
      // NOW, SAVE THE VALUE AT DB
      con.query("insert into test set ?", [data], function (err, rows) {
        if (err) throw err;
        res.send("Value has bee inserted");
    })
  }
}

这里的问题是异步执行,在{{1>} con.query从{{1}返回之前,您使用data 调用data }}