2016-12-22 6 views
0

ユーザーモデルのデータにアクセスしようとしています(Express、Pug、およびMongooseを使用しています)。Mongoose:ユーザーモデルのデータへのアクセス

これは私のスキーマです:

var userSchema = mongoose.Schema({ 
    userData: { 
    name: { type: String, required: true, unique: true }, 
    password: String 
    }, 
    notes: [ String ], 
    contacts: [{ 
    name: String, 
    notes: [ String ] 
    }], 
    locations: [ String ] 
}); 

これは私のパグ・テンプレート・ファイルです:私のミスかもしれない

app.get('/', function(req, res) { 
    if (app.locals.userData.name) { 
    res.render('app', { 
     currentUser: app.locals.userData, 
     allUsers: User.find({}) 
    }); 
    } else { 
    res.redirect('signup'); 
    } 
}); 

each user in allUsers 
    p #{user.userData.name} 

私のルートは、このようになりますか?

ブラウザにCannot read property 'name' of undefinedというエラーが表示されます。

+0

'User.find'は約束を返し、レンダリングは約束を待つことはありません。したがって、DBからの結果が利用可能になった後、 'render'だけが実行されることを確認する必要があります。 – qqilihq

+0

大丈夫です。私は自分自身で解決策を見つけました! – Timo

答えて

1

私はコールバック関数を使用する必要がありました!

app.get('/', function(req, res) { 
    User.find({}, function(err, users) { 
    if (app.locals.userData.name) { 
     res.render('app', { 
     currentUser: app.locals.userData, 
     allUsers: users 
     }); 
    } else { 
     res.redirect('signup'); 
    } 
    }); 
}); 
+0

'user'データは明らかに' if(app.locals.userData.name) 'のみであるため、' User'find'を 'if'条件の後に深く移動することもできます。 DBを不必要にぶつけないようにする。 – qqilihq

関連する問題