MongoDBコレクションからデータを取得し、グローバルオブジェクトに保存しようとしています。後でHTMLテンプレートを解析する必要があります。MongoDBからデータを取得し、Node.jsおよびExpress.jsのグローバルオブジェクトに保存します
ユーザログが自分のプロフィールに: はここに私のコードですし、我々は彼のプロジェクトを取得する必要があり、ここで我々はfindeprojectsを呼び出す()関数
ここusrRouter.route('/profile')
.all(function (req,res,next) {
if(!req.user){
res.redirect('/');
}
next();
})
.get(function (req,res,userObj) {
// var proj = findprojects();
userObj = req.user;
var pro = {};
pro = findprojects(userObj);
res.render('index',{name:userObj.username, email:userObj.email});
//res.sendFile('profile.html',{root:path.join(__dirname,'../public'),},{name:userObj.username});
});
findeprojects機能コードは次のとおりです。
var findprojects = function(obj) {
var usern = obj.username;
mongodb.connect(url,function(err, db){
if(err) throw err;
var collection = db.collection('projects');
//console.log(usern);
collection.find({'pusername':usern});
cursor =db.collection('projects').find({ 'pusername': usern }).toArray(function(err,items){
//console.log(items);
var i;
for(i=0; i<items.length;){
userProjects.createdBy = items[i].pusername;
userProjects.proName = items[i].projectName;
userProjects.proType = items[i].projectType;
userProjects.proDesc = items[i].projectDesc;
//return userProjects;
i = i+1;
}
});
console.log(userProjects);
});
};
私は次のように先頭にグローバルオブジェクトを宣言している:
userProjects = {
createdBy:'',
proName:'',
proType:'',
proDesc:''
};
しかし、私はfindeprojects()関数を呼び出した後userprojectsオブジェクトを慰めるときには、空の値を表示します。
あなたはループの後にこの値を取得していますか? – abdulbarik
残念なことに、Nodeの非同期性の性質をどのように扱うか分からず、グローバル(問題の解決策ではない)を使用して回避しようとしているようです。私はあなたが何かよりはるかに単純なもの(あなたが投稿しているコードの中にたくさんの動いている部分があります)を使い始めると、非同期関数を扱う方法に関する良いチュートリアルを読んだ方が簡単だろうと思います。 – robertklep
あなたのデータを見たい場合は、 'toArray'メソッドで' console.log'ステートメントをコールバック関数の側で動かすことができます。しかし、私も@rokeryklepに同意します。 – Mike