2017-07-13 127 views
1

我有一個小項目來向我介紹一些前端技術。我正在使用Node,Express,Pug和MongoDB。貓鼬不保存正確的模式

我在user.js的文件中定義的用戶模式:

var userSchema = mongoose.Schema({ 

    username : String, 
    password : String, 
    jobs : [{ type: mongoose.Schema.Types.Mixed }] 

}); 

然後,在我的passport.js文件,我開始註冊過程。

 User.findOne({ 'username' : username }, function(err, user) { 
     // if there are any errors, return the error 
     if (err) { 
      console.log(err); 
      return done(err); 
     } 

     // check to see if theres already a user with that email 
     if (user) { 
      console.log('user exists'); 
      return done(null, false, req.flash('signupMessage', 'That username is already taken.')); 
     } else { 
      console.log('creating new user...'); 
      // if there is no user with that email 
      // create the user 
      var newUser = new User(); 

      newUser.username = username; 
      newUser.password = newUser.generateHash(password); 
      newUser.jobs = [{ website: 'google.com' }]; 

      // save the user 
      newUser.save(function(err) { 
      if (err) { 
       console.log(err); 
       throw err; 
      } 
      console.log('user saved: ', newUser); 
      return done(null, newUser); 
      }); 
     } 
     }); 

的成功後保存新的用戶爲:

{ 
    "_id": { 
     "$oid": "5967d2acc64d953330a3ac32" 
    }, 
    "__v": 0 
} 

我的目標是有在網站的鏈接,可以推入陣列該用戶的數據庫的數組。

感謝您的任何援助。

回答

1

設置工作現場類型的混合陣列:

var userSchema = mongoose.Schema({ 
    local: { username : String, password : String }, 
    jobs: [ { type: mongoose.Schema.Types.Mixed } ] 
}); 

然後創建傳遞所有參數構造函數的用戶:

var newUser = new User({ 
    local: { 
    username: username, 
    password: User.generateHash(password), 
    }, 
    jobs: [{ website: 'google.com' }] 
}); 

// save the user 
newUser.save(function(err) { 
    if (err) { 
    console.log(err); 
    throw err; 
    } 
    console.log('user saved: ', newUser); 
    return done(null, newUser); 
}); 

您還可以創建用戶無需先實例吧:

// save the user 
User.create({ 
    local: { 
    username: username, 
    password: User.generateHash(password), 
    }, 
    jobs: [{ website: 'google.com' }] 
}, function(err, newUser) { 
    if (err) { 
    console.log(err); 
    throw err; 
    } 
    console.log('user saved: ', newUser); 
    return done(null, newUser); 
}) 

對於這兩種方法,您可能需要使generateHash a static method

+0

我修改了作業數組的類型並修改了newUser的創建。現在我發現User.generateHash既不是一個既是實例又是靜態函數的函數。 – klewis