我最近学习快递,想用express + mongodb + monk + ejs创建一个小博客,下面是我写的代码:
model是一些用于处理数据的js exports函数:
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函数,包括一个扩展double对象的方法,就像jQuery.extend一样。)
view是控制器呈现的页面:
<% 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 %>
困惑我的是模型的一部分,我只能访问名为的方法中的数据
xxx.find({},{},function(data){
//some handle with data
})
导致我只使用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')
});
});
我的词汇很差,多亏了google翻译; - )
有谁帮忙?添加:
var s = contentCollection.find({},{},function(err,data){
fn(data);
});
console.log(s);
当我安慰它时,是一个承诺。
答案 0 :(得分:0)
好的,我自己找到解决方案。 在研究了基于Koa项目的同事代码之后,我发现我的代码与他之间有所不同:这不是僧人的错,这让我混淆了我上面提到的,它是责备快递! 下面是Koa用于呈现页面的路径的代码样式:
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
})
})
})
})
看到差异?
Express是回调,回调,回调!
我的解决方案是一个名为&#34;同义词&#34;的依赖项,它说koa也是基于它,下面是我使用共同表达后的代码:
router.get('/', wrap(function *(req,res,next){
res.render('content',$.extend(req.staticRes,{
content: yield $data.getContent(),
userinfo: yield $data.getUserInfo()
}))
}));
它看起来很棒。
谢谢你自己: - )