如何构build我的nodejs代码? 胖模型/瘦身控制器

我的代码工作,但我明白,最好有胖的模型和皮包骨头的控制器。

但是,我使用3种不同的模型,不幸的是使我的控制器变胖。 组织这个代码的最好方法是什么(使用胖模型/瘦控制器概念)? 我一直在阅读代码结构,但我有点不确定的最佳做法。

控制器:

var Product = require('../models/product'); var Collection = require('../models/collection'); var Vote = require('../models/vote'); exports.topSearch = function(req, res) { console.log(req.body, "search product") Product.search({ query_string: { query: req.body.search } },req.body.searchObject, function(err, results) { if (err) console.log('ERR', err); if (results) { var data = results.hits.hits; Vote.find({ user: req.user._id }, function(err, votes) { if (!err) { for (var i = 0; i < votes.length; i++) { for (var j = 0; j < data.length; j++) { if (data[j]['_id'] == votes[i]['product']) { data[j]['voteId'] = votes[i]['_id']; data[j]['userVote'] = votes[i]['vote']; } } } } Collection.find({ user: req.user._id }, function(err, collections) { if (!err) { for (var i = 0; i < collections.length; i++) { for (var j = 0; j < data.length; j++) { if (data[j]['_id'] == collections[i]['product']) { console.log('match') data[j]['collected'] = true; data[j]['collectId'] = collections[i]['_id']; data[j]['favorite'] = collections[i]['favorite']; } else if (data[j]['_id'] !== collections[i]['product'] && data[j]['collected'] !== true) { data[j]['collected'] = false; } } } res.send(data); } }); }); } else { res.send({ errmsg: 'results not defined' }) } }); }; 

然后我在我的路线上打电话给我:

  app.post('/products-search', users.ensureAuthenticated, products.topSearch); 

您可以在模型或函数下创build一个单独的文件,您可以在其中完成与“topSearch”相关的所有基于模型的处理,然后只需在控制器中调用单个方法即可。

使用像async.js更好地处理callback和stream。

我个人遵循这个回购定义的文件夹结构。

更好的节点快车-APP-结构

有时我会根据复杂性将子文件夹添加到模型和控制器中。

经常使用的select查询可以作为独立的函数直接导出,以方便重用。