2015-08-23 4 views
1

Только что началось с узла, экспресс и Mongoose.Mongoose save не работает

Mongoose версия: 4.1.3

Вот моя модель

var mongoose = require('mongoose'), 
    bcrypt = require('bcrypt'), 
    ObjectId = mongoose.Schema.Types.ObjectId, 
    Timestamp = global.requireLib('timestamp'); 


var UserSchema = mongoose.Schema({ 
    email: {type: String, required: true, unique: true}, 
    password: {type: String, required: true}, 
    first_name: {type: String}, 
    last_name: {type: String}, 
    username: {type: String, unique: true}, 
    role: {type: String, required: true, default: 'user'}, 
    created_at: {type: Number, required: true, default: Timestamp.now()}, 
    updated_at: {type: Number, required: true, default: Timestamp.now()} 
}); 


UserSchema.methods.hashPassword = function() { 
    salt = bcrypt.genSaltSync(13); 
    this.password = bcrypt.hashSync(this.password, salt); 
} 


UserSchema.methods.validate = function (password) { 
    return bcrypt.compareSync(password, this.password); 
} 


var User = mongoose.model('User', UserSchema, 'users'); 


module.exports = User; 

Вот 'контроллер' метод:

create: function (req, res) { 
     User.findOne({email: req.body.email}, function (err, user) { 
     if (err) { 
      res.error('UnknownError'); 
     } else if (!user) { 
      user = new User(req.body); 
      user.hashPassword(); 
      user.save(function (err) { 
      if (err) { 
       res.error('UnknownError'); 
      } else { 
       res.success({id: user.id}); 
      } 
      }); 
     } else { 
      res.error('EmailExists'); 
     } 
     }); 
    }, 

Запрос:

curl -X POST -H 'Content-type: application/json' -d '{"email": "[email protected]", "password": "123"}' http://localhost:3000/users 

маршрутизации работы отлично, если я добавлю консоль. log() в начале функции create, я увижу его в консоли. Если я сделаю console.log (user.save) - я буду se, что это функция. Но там нигде нет записи MongoDB. Обновление работает нормально, если я обновляю с помощью upsert - это нормально.

Осталось: 6 часов, не можете найти ошибку.

+0

Fyi * Date.now * также работает по умолчанию метки времени :) –

+0

@ThomasBormans спасибо) –

+0

вы решить эту проблему, в конце концов? У меня такая же. – Stefan

ответ

0
user.save(function (err) { 
    if (err) { 
     console.log(err); 
     res.send(err); 
    } 
    else { 
     console.log(user.id); 
     res.success({id: user.id}); 
    } 
}); 

Обновить код и проверить, какие ошибки вы получаете в консоли

+0

Нет ошибки! Мне кажется, что спасение вообще не выполняется! Если я напишу console.log (1) перед user.save - я увижу его, но ни один из console.log() (я не разместил их в сохранении между всеми строками) в save будет в консоли. –

0

Не могли бы вы пытаетесь добавить следующий() к вашей hashPassword функции, как это?

UserSchema.methods.hashPassword = function() { 
    salt = bcrypt.genSaltSync(13); 
    this.password = bcrypt.hashSync(this.password, salt); 
    next(); 
}