2016-04-28 9 views
1

私は最近、急行を学び、エクスプレス+ MongoDBの+僧侶+ EJSと小さなブログを作りたい、下記の私はwritedコードです:修道士は約束の代わりに直接データを返すことができますか?

モデルでは、輸出が扱えるように機能するいくつかのjsされているデータ:

var db = require('../model/public').db; 
var contentCollection = db.get('contentcollection'); 
exports.getContent = function (fn) { 
    contentCollection.find({},{},function(err,data){ 
     fn(data); 
    }); 
}; 

コントローラは、ルートとの契約である:

var express = require('express'); 
var router = express.Router(); 
var $data = require('../model/core').$content; 
var $ = require('../controller/util'); 
router.get('/', function(req, res, next){ 
    $data.getContent(function(data){ 
     res.render('content', $.extend(req.staticRes, { 
      article: data 
     })); 
    }); 
}); 
module.exports = router; 

(このコードでは、「$」はutilの機能で行うだけでjQuery.extendのような二重のオブジェクトを拡張する方法を含む。)

コントローラは、レンダリング可能ページです

ビュー:

<% include ./public/head %> 
<%include ./public/header%> 
<%for(var i = 0;i<article.length;i++){%> 
    <div class="article"> 
     <div class="title"> 
      <%= article[i]["title"]%> 
     </div> 
     <div class="content"> 
      <%= article[i]["content"]%> 
     </div> 
    </div> 
<%}%> 
<script src="/js/content.js"></script> 
<% include ./public/footer %> 

私を混同して何がモデルの一部では、私は私だけを使用することになり

​​

という名前のメソッド内のデータにアクセスすることができますそのようなgetContnet機能:

router.get('/', function(req, res, next){ 
    $data.getContent(function(data){ 
     res.render('content', $.extend(req.staticRes, { 
      article: data 
     })); 
    }); 
}); 

しかし、私は唯一の以下のフォームなどのデータベースからのデータのクエリを処理したいので、私はデータを照会いくつかの機能を使用することができますが、別のコレクションを形成:

router.get('/', function(req, res, next){ 
    res.render('content', { 
     article: $data.getContent('some arguments here to query from content collection'), 
     user: $data.getUser('some arguments here to query from user collection') 
     }); 
}); 

私の語彙は、グーグルのおかげで;-)

誰が助けて翻訳し、悪いですか?

追加:

var s = contentCollection.find({},{},function(err,data){ 
     fn(data); 
    }); 
console.log(s); 

は、私はそれを慰める約束です。

答えて

0

私は解決策を見つけました。 Koaをベースにした私の同僚のコードを調べたところ、私は彼と私のコードの違いが分かりました。私が上記のことを混乱させるのは修道士のせいではなく、Expressのせいです!以下 は、ページをレンダリングするルートの興亜のコードスタイルです:

yield this.render('index', { 
    topics: $Topic.getTopicsByTab(tab, p), 
    items: $Scrape.getAllTopics(tab,p) 
}); 

以下は(私が間違っていないよ場合)の明示である:

router.get('/',function(){ 
    $data.getUserInfo(function(user){ 
     $data.getContent(function(content){ 
      res.render('index',{ 
       userinfo:user, 
       content:content 
      }) 
     }) 
    }) 
}) 

はdifferenentを参照してください?

Expressは、コールバック、コールバック、コールバックです。

と私の解決策は、「共発現」という名前のdependeniesを持っている、私が共発現使用した後も、以下、それに基づいてKOAがコードであると言われています:

router.get('/', wrap(function *(req,res,next){ 
    res.render('content',$.extend(req.staticRes,{ 
     content: yield $data.getContent(), 
     userinfo: yield $data.getUserInfo() 
    })) 
})); 

それはだが素晴らしいです。

ありがとうございました:-)

関連する問題