2012-02-25 9 views
2

私はあなたに助けてくれると嬉しいです。基本的には、私はMongoDBコレクションのクエリを実行し、結果を翡翠ビューに戻そうとしています。MongoDBデータをExpressJSのJadeビューに渡す

app.helpers({ 
    clients: function(){ 
    users.find({uid:req.session.uid}).toArray(function(err, post){ 
     if(err){ 
     console.log(err); 
     }else{ 
     return post; 
     } 
    }); 
    } 
}); 

私は今、私はちょうどビューの値として、[オブジェクトのオブジェクト]を取得していビュー

p #{clients} 

にヘルパーオブジェクトを参照する場所です。結果をログに記録すると、予想されるドキュメントの結果が得られますが、配列やvarにプッシュしようとすると、[object Object]という結果が得られます。何か案は?

答えて

1

これは動作しません、あなたは以下の構造を使用するので:内部機能から

clients: function() { 
    (some code)(function() { 
     return variable; 
    }); 
} 

return variable;の文に戻ります。しかし、外部関数から変数を返す必要があります。だからこれをどうやって?実際にはできません。ビュー内でクエリを実行し、結果を要求に格納してから、要求変数をテンプレートに渡す必要があります。ヘルパーでは非同期関数を使用できません。

もう一つは、あなたがヘルパー内の関数を使用する場合、それは関数であるので、そのテンプレートにあなたが

p #{ clients() } 

を使用する必要があるということです。それにもかかわらず、この場合は動作しません。

+0

私は実際にこれをヘルパーから取り出して、ビューコールに戻しましたが、まだ動作させるようには見えません。 mongodbクエリの結果をvarまたは配列に代入してビューに渡すにはどうすればよいですか? – chaddy81

+0

私は複数の場所でデータにアクセスしているのでセッションバーに固執してしまいましたが、これは正常に動作しているようです。ご協力いただきありがとうございます。 – chaddy81

+1

@ChadBartelsレンダリングしている瞬間にそれを行います。変数 'clients'を持っていれば' res.render( 'view_name.jade'、{clients_label:client}) 'を実行し、この'#{clients_label} 'のようなテンプレートで使うことができます。がんばろう! – freakish

関連する問題