2017-07-13 16 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 
} 

ありがとうございます。その後、コンストラクタにすべてのパラメータを渡してユーザーを作成

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

答えて

1

は混血の配列としての仕事のフィールドタイプを設定し

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

私はjobs配列の型を変更し、newUserの作成を変更しました。今私はUser.generateHashがインスタンスと静的関数の両方の関数ではないことに気付きました。 – klewis

関連する問題