var mongoose = require('mongoose'); var Schema = mongoose.Schema; var bcrypt = require('bcrypt-nodejs'); var UserSchema = new Schema({ name: String, userid: String, updated_at: { type: Date, default: Date.now }, username: { type: String, unique: true, required: true }, password: { type: String, required: false }, social: { type: Boolean, required: false } }); // UserSchema.statics.findOrCreate = function findOneOrCreate(condition, callback) { // console.log(JSON.stringify(condition)); // const self = this; // self.findOne(condition, (err, result) => { // return result ? callback(err, result) : self.create(condition, (err, result) => { // return callback(err, result) // }) // }) // }; UserSchema.statics.findOneOrCreate = function(displayName, cb){ console.log('findOneOrCreate'+displayName); return (displayName ? this.find({name: displayName}, cb) : this.findOne({}, cb)).then(page => page ? page : this.create({}, cb)) }; UserSchema.pre('save', function (next) { var user = this; if (this.isModified('password') || this.isNew) { bcrypt.genSalt(10, function (err, salt) { if (err) { return next(err); } bcrypt.hash(user.password, salt, null, function (err, hash) { if (err) { return next(err); } user.password = hash; next(); }); }); } else { return next(); } }); UserSchema.methods.comparePassword = function (passw, cb) { bcrypt.compare(passw, this.password, function (err, isMatch) { if (err) { return cb(err); } cb(null, isMatch); }); }; module.exports = mongoose.model('User', UserSchema);