monk return 一个 json 的数据可以直接代替 promise 吗?
Can monk return a json of data directly instead of a promise?
最近在学express,想用express+mongodb+monk+ejs做一个小博客,下面是我写的代码:
模型是一些 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;
(在此代码中,“$”是一个实用函数,包括一个扩展双对象的方法,就像 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 %>
让我困惑的是模型的部分,我只能在名为
的方法中访问数据
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);
当我安慰它时,它是一个承诺。
好吧,我自己找办法了。
在研究了我基于 Koa 项目的同事的代码之后,我发现我的代码与 him:it 之间的差异不是我上面提到的僧侣的错,这让我感到困惑,这是 Express 的错!
下面是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
})
})
})
})
看出不同了吗?
快递是回调,回调,回调!
我的解决方案是有一个名为"co-express"的依赖,据说koa也是基于它的,下面是我使用co-express后的代码:
router.get('/', wrap(function *(req,res,next){
res.render('content',$.extend(req.staticRes,{
content: yield $data.getContent(),
userinfo: yield $data.getUserInfo()
}))
}));
看起来很棒。
感谢我自己:-)
最近在学express,想用express+mongodb+monk+ejs做一个小博客,下面是我写的代码:
模型是一些 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;
(在此代码中,“$”是一个实用函数,包括一个扩展双对象的方法,就像 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 %>
让我困惑的是模型的部分,我只能在名为
的方法中访问数据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);
当我安慰它时,它是一个承诺。
好吧,我自己找办法了。 在研究了我基于 Koa 项目的同事的代码之后,我发现我的代码与 him:it 之间的差异不是我上面提到的僧侣的错,这让我感到困惑,这是 Express 的错! 下面是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
})
})
})
})
看出不同了吗?
快递是回调,回调,回调!
我的解决方案是有一个名为"co-express"的依赖,据说koa也是基于它的,下面是我使用co-express后的代码:
router.get('/', wrap(function *(req,res,next){
res.render('content',$.extend(req.staticRes,{
content: yield $data.getContent(),
userinfo: yield $data.getUserInfo()
}))
}));
看起来很棒。
感谢我自己:-)