我有一个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 );
用户永远不会真正创建程序,而被卡住。我希望这实际上可以保存而不被卡住。