2016-06-30 4 views
0

Я попытался вставить значение шифрования в db, я могу зашифровать значение, которое зашифрованное значение не может быть вставлено в db.шифрование в узле js

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> 
+0

Какая ошибка? –

+0

У меня нет никакой ошибки данные, которые поступают из html-формы, непосредственно вставленной в db. Но он не преобразуется как данные шифрования. И когда я проверяю терминал, я получаю два значения Lname, это прямые данные, а другой - зашифрованные данные. – chozhan

+0

Это выглядит неправильно: 'data.Lname = hash;' потому что 'hash' не определен нигде. Вы имели в виду использовать 'gotit' вместо этого? – jfriend00

ответ

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); 
      }) 
     }) 
    } 

Apart, вы должны вызвать его внутри обработчика следующим образом:

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"); 
    }) 
    } 
} 

Проблема была асинхронное выполнение, вы звонили con.query с dataперед темdata с hashP

+0

Но шифрование не происходит таким образом, все, что я хочу зашифровать, прежде чем он перейдет к db. – chozhan

+0

Я отредактировал ответ. Проверь это! – Manu

+0

Спасибо, что он работает отлично – chozhan

Смежные вопросы