MongoDB处于保存状态

时间:2019-06-07 18:16:45

标签: javascript node.js mongodb mongoose

我有一个Node js项目,我正在尝试注册用户。非常简单。我已经设置了用户模型和端点。

我可以看到我的请求正在到达我的注册端点,但是似乎事情在MongoDB方面卡住了,并且从未创建用户。我的请求通常会失败,因为它们花费的时间太长。

我已经阅读了以前的文章和文章,说我应该对猫鼬使用.connect函数。依然没有。

我已将所有IP列入白名单,并向我的用户授予了管理员访问权限,所以我不知道这是什么。

我可以在我的注册函数中看到registerData和req.body在那里,因为它们已打印到控制台。 savedUser不打印。

index.js-连接

mongoose.connect(config.DB_URI, { useNewUrlParser: true })
  .then(() => console.log('DB Connected!'))
  .catch(err => console.log(err));

user.js-控制器注册功能

exports.register = function(req, res) {
  const registerData = req.body
  console.log(req.body);

  if (!registerData.email) {
    return res.status(422).json({
      errors: {
        email: 'is required',
        message: 'Email is required'
      }
    })
  }

  if (!registerData.password) {
    return res.status(422).json({
      errors: {
        password: 'is required',
        message: 'Password is required'
      }
    })
  }

  if (registerData.password !== registerData.passwordConfirmation) {
    return res.status(422).json({
      errors: {
        password: 'is not the same as confirmation password',
        message: 'Password is not the same as confirmation password'
      }
    })
  }

  const user = new User(registerData);
  console.log(registerData);
  return user.save((errors, savedUser) => {
    if (errors) {
      return res.status(422).json({errors})
    }

    console.log(savedUser);
    return res.json(savedUser)
  })
}

user.js-模型

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const jwt = require('jsonwebtoken')
const bcrypt = require('bcrypt')
const config = require('../config/dev')

const userSchema = new Schema({
  email: { type: String,
           required: 'Email is Required',
           lowercase: true,
           unique: true,
           match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/]},
  name: { type: String,
          required: false,
          min: [6, 'Too short, min is 6 characters']},
  password: {
    type: String,
    min: [4, 'Too short, min is 4 characters'],
    max: [32, 'Too long, max is 32 characters'],
    required: 'Password is required'
  },
  createdAt: { type: Date, default: Date.now },
  updatedAt: { type: Date, default: Date.now },
});

userSchema.pre("save", function(next){
   const user = this;

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

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

          user.password = hash;
          next();
      });
   });
});

//Every user have acces to this methods
userSchema.methods.comparePassword = function(candidatePassword, callback){
   bcrypt.compare(candidatePassword, this.password, function(err, isMatch){
      if(err) {return callback(err);}

      callback(null, isMatch);
   });
}


userSchema.methods.generateJWT = function () {
  return jwt.sign({
    email: this.email,
    id: this._id
  }, config.JWT_SECRET, {expiresIn: '1h'})
}

userSchema.methods.toAuthJSON = function () {
  return {
    _id: this._id,
    name: this.name,
    email: this.email,
    token: this.generateJWT()
  };
}

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

用户永远不会真正创建程序,而被卡住。我希望这实际上可以保存而不被卡住。

0 个答案:

没有答案