单击注册页面中的提交按钮后出现“bcrypt未定义”错误

时间:2017-11-23 05:44:50

标签: node.js

我在node.js中设计了注册页面,但在点击注册表单中的提交按钮后,我收到以下错误:

发生了一些错误:引用错误:“bcrypt未定义”

我的用户模型如下:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var userSchema = new Schema({

    userName            : {type:String,default:'',required:true},
    firstName           : {type:String,default:''},
    lastName            : {type:String,default:''},
    email               : {type:String,default:''},
    mobileNumber        : {type:Number,default:''},
    password            : {type:String,default:''},
});

userSchema.pre('save', function(next) {
  var myuser = this;
  var SALT_FACTOR = 5;

  if (!myuser.isModified('password')) return next();

  bcrypt.genSalt(SALT_FACTOR, function(err, salt) {
    if (err) return next(err);

    bcrypt.hash(myuser.password, salt, null, function(err, hash) {
      if (err) return next(err);
      myuser.password = hash;
      next();
    });
  });
});

userSchema.methods.comparePassword = function(candidatePassword, cb) {
  bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
    if (err) return cb(err);
    cb(null, isMatch);
  });
};
module.exports = mongoose.model('myUser',userSchema);

3 个答案:

答案 0 :(得分:0)

您需要安装然后需要一个bcrypt库,它不会内置到Node中,因此它为undefined

有几个可用,bcrypt.js是一个用本机JS编写并仍然维护的。还有bcrypt package绑定到C ++ bcrypt实现,它比纯JS实现运行得更快,但是你可能遇到compilation errors;因此,如果您不知道如何解决这类问题,您可能希望坚持使用JS实现。

要安装bcrypt.js,您可以使用npm:npm install bcryptjs

然后,在代码的顶部和mongoose一起使用它:

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');

答案 1 :(得分:0)

是的我已经安装了bcryptjs并将其包含在我的猫鼬中。 但是当我点击“注册”按钮时,它会生成一个随机密码,而不是我在填写注册表单时输入的密码。

答案 2 :(得分:0)

首先在 npm 中使用以下命令安装 bcrypt

`npm install --save bcrypt`

稍后使用:

在后端节点js服务中导入bcrypt模块

const bcrypt = require('bcrypt');

然后使用 bcrypt.hash() 方法我们可以加密消息或密码。