我是NodeJs的初学者并尝试将用户详细信息保存到mlab,但无法存储密码哈希值。哈希计算并出现在console.log中,但在mlab文档中,存储明文而不是哈希。
var express = require('express');
var router = express.Router();
var mongojs = require('mongojs');
var bcrypt = require('bcrypt');
var db = mongojs('mongodb://admin:admin@ds133776.mlab.com:33776/project',
['users']);
router.get('/',function(req,res,next){
res.render('register.html');
});
router.post('/reguser',function(req,res,next){
var user = req.body;
db.users.findOne({uemail: user.uemail},function(err,xuser){
if(xuser){
res.send('User already exists'+JSON.stringify(user));
}
else{
bcrypt.hash(user.upassword,8,function(err,hash){
user.upassword = hash;
console.log('hash is '+user.upassword);
});
db.users.save(user, function(err,user){
if(err){
res.send(err);
} else {
console.log('Saved-- '+JSON.stringify(user));
res.json(user);
}
});
}
});
});
答案 0 :(得分:1)
这是因为哈希函数是asynchronous。代码的执行不遵循直线。在此特定情况下执行散列之前运行save函数。如果将保存嵌套在哈希回调中,则首先创建哈希,然后进行保存。
像这样:
bcrypt.hash(user.upassword,8,function(err,hash){
user.upassword = hash;
console.log('hash is '+user.upassword);
db.users.save(user, function(err,user){
if(err){
res.send(err);
} else {
console.log('Saved-- '+JSON.stringify(user));
res.json(user);
}
});
});