错误:需要数据和salt参数

Sar*_*hal 10 javascript mongodb node.js

我正在尝试使用post请求将用户保存到mongodb数据库,如下所示,但我收到错误bcrypt错误:需要数据和哈希参数.这是一个非常简单的代码设置但我无法弄清楚它有什么问题.车型/ users.js

const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const confic = require('../models/users');

// User schema
const UserSchema = mongoose.Schema({
	name: {
		type: String,
	},
	email: {
		type: String,
		required: true
	},
	username:{
		type: String,
		required: true
	},
	password: {
		type: String,
		required: true
	}
});

const User = module.exports = mongoose.model('User', UserSchema);

module.exports.getUserById = function(id,callback){
	User.findById(id,callback);
}

module.exports.getUserByUsername = function(username,callback){
	const query = {username:username}
	User.findOne(query,callback);
}

module.exports.addUser= function (newUser, callback) {
   bcrypt.genSalt(10,(err,salt) => {
   	bcrypt.hash(newUser.password, salt , (err, hash) =>{
        if(err) throw (err);

        newUser.password=hash;
        newUser.save(callback);
   	});
   });
}
Run Code Online (Sandbox Code Playgroud)
路线/ users.js

const jwt = require('jsonwebtoken');
User = require('../models/users')

// // Register
router.post('/register', (req, res, next) => {
  var newUser = new User({
    name: req.body.name,
    email: req.body.email,
    username: req.body.username,
    password: req.body.password
  });

  User.addUser(newUser, (err, User) => {
    if(err){
      // res.json({success: false, msg:'Failed to register user'});
    } else {
      // res.json({success: true, msg:'User registered'});
    }

  });

});

// Authenticate
router.post('/authenticate', (req, res, next) => {
  res.send('AUTHENTICATE');
});

// Profile
router.get('/profile', (req, res, next) => {
  res.send('PROFILE');
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)
服务器正在运行,但在使用postman chrome post请求错误后,服务器停止工作,因为图像中显示错误.在此输入图像描述

boe*_*m_s 17

错误来自该bcrypt.hash方法.在您的情况下,您有以下代码:

bcrypt.hash(newUser.password, salt , (err, hash) => { ... }
Run Code Online (Sandbox Code Playgroud)

我认为你的问题来自newUser.password必须是空的(nullundefined).错误说data and salt arguments required.看起来你的盐是正确生成的,你没有检查是否newUser.password === undefined,所以这是我的赌注:不知何故newUser.password是未定义的.

此外,您可以genSalt通过if(err) throw (err);在调用方法之后添加方法来检查方法是否正常工作bcrypt.hash.

希望它有所帮助,
祝你好运