关于monk+mongodb+express+ejs数据操作的疑问
遇到一个res.render()的问题,项目相关信息如下: 项目采用MVC模式 controller是路由和相关逻辑控制,如访问一个content页面(已经省略require引用): controller/content.js:
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
}));
next();
});
});
module.exports = router;
其对应的view是: view/content.js:
<% 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 %>
相应model是:
var db = require('../model/public');
var contentCollection = db.db.get('contentcollection');
exports.getContent = function (fn) {
contentCollection.find({},{},function(err,data){
fn(data);
});
};```
我的问题是,如果view中的数据来不同的model,该如何在controller中输出呢?
现在想访问model中的getContent方法查询的数据,必须在这个方法的回调中使用,如上述的controller的render中:
```javascript
router.get('/', function(req, res, next) {
$data.getContent(function(data){
res.render('content', $.extend(req.staticRes,{
article: data
}));
});
});
因为render之后req-res响应体就关闭了,无法再发送数据给页面,那我该如何通过一个view访问不同的model读出的数据呢? 我的想法是这样的,上述中可以改为这样: controller/content.js:
res.render('content', $.extend(req.staticRes,{
article: $data.getContent()
}));
当然相应的model也需要改变,问题的关键是,现在model中的getContent中的monk查询数据库,返回的是一个Promise对象: model/content.js
exports.getContent = function (fn) {
contentCollection.find({},{},function(err,data){
fn(data);
});
};
想操作这个data只能在contentCollection里面的回调操作,无法直接返回查询出来的数据给getContent,因为这个:
contentCollection.find({},{},function(err,data){ fn(data);});
是一个promise。
第一次发帖,求轻喷。
any idea?