2017-04-09 83 views
1

由於某些原因,bcrypt.hash方法掛起並且從不調用其回調。bcrypt.hash不會調用其回調

bcrypt.genSalt(29, function(err, salt) { 
    if (err) { 
     res.json({ success: false, msg: err.message }); 
    } else { 
     bcrypt.hash(req.body.password, salt, function (err, hash) { 
      // This function is never called 
      res.json({ success: true }); 
     }); 
    } 
}); 

有什麼建議嗎?

UPDATE

看來它不與express.js &等有關。 我只是創建了一個腳本文件test.js

var bcrypt = require('bcrypt'); 

var pwd = 'Test password 123'; 

bcrypt.genSalt(29, function(err, salt) { 
    if (err) { 
     console.log('1: ' + err.message); 
    } else { 
     console.log('Salt: ' + salt); 
     bcrypt.hash(pwd, salt, function (err, hash) { 
      if (err) { 
       console.log('2: ' + err.message); 
      } else { 
       console.log('Hash: ' + hash); 
      } 
     }); 
    } 
}); 

然後,我通過使用node test.js啓動它。它會輸出一個salt,之後它會掛起並且bcrypt.hash在任何情況下都不會調用它的回調函數。我正在使用OS X,並且已安裝節點v7.8.0。

+0

第一個回調拋出錯誤?另外,是否定義了req.body.password?我認爲這是坐在某個端點的內部,但沒有看到代碼。 – user2263572

+0

@ user2263572 1.沒有2.是 –

+0

@ user2263572我已經更新 –

回答

2

29鹽輪意味着Math.pow(2, 29)重要輪次,這將需要很長時間。

爲了說明:

  • 10輪約需78ms在我的MBP
  • 12輪大約需要300毫秒
  • 14輪大約需要1170ms
  • 16輪大約需要4700ms

你也許可以用數學來計算使用29輪的時間需要多長時間(它沿着2.6mil線的某處獅子秒,或約一個月)。

+0

由於某種原因,我確定29 - 是一段鹽串。現在看來我已經開始明白了。謝謝! ) –