切换到Mongoose,我不应该使用请求客户端?

我创build一个松散的MEAN堆栈应用程序,在这里发现的演示: https : //github.com/angular-app/angular-app

Im新来mongo,但想在服务器端使用Mongoose,并注意到它目前使用请求客户端与数据库交谈:

代码: https : //github.com/angular-app/angular-app/blob/master/server/lib/mongo-strategy.js

var rest = require('request'); ... MongoDBStrategy.prototype.query = function(query, done) { query.apiKey = this.apiKey; var request = rest.get(this.baseUrl, { qs: query, json: {} }, function(err, response, body) { done(err, body); }); }; 

该服务器还configuration为代理调用mongolab REST API(可在此处find: https : //github.com/angular-app/angular-app/blob/master/server/lib/mongo-proxy.js )。

我不知道是否有一个特定的原因,应用程序使用请求,而不是mongod本机或mongoose,但为了开始使用mongoose,我只是简单地删除请求客户端,并开始使用mongoose? 而且会干涉代理吗?

谢谢!

不,mongoose,你一定要使用本地驱动程序。

在你提到的angular-app项目中,mongolab API被代理到客户端代码中:

https://github.com/angular-app/angular-app/blob/master/client/vendor/mongolab/mongolab-resource.js

我认为这样做的好处是可以节省您编写自己的快速API层的麻烦,因为您的客户端实际上是直接使用mongolab的API结构。 但我想这是以灵活性和性能为代价的。

本地驱动程序也可以比REST API做得更多。 除了更好的性能之外,如果你的查询返回的是大数据集,本地驱动程序则为你提供诸如游标和stream的东西。 使用REST客户端,您的查询结果将被分页。

不幸的是,如果您已经非常密切地构build了应用程序,那么移动到mongoose可能不是一个简单的交换,这意味着在客户端和服务器上模型级别的代码更改。

然而,对于好的mongoose+angular度的例子,meanjs.org有一个很好的参考实现,你可能会觉得很有用: https : //github.com/meanjs/mean

它也有一个梦幻般的yeoman生成器来生成项目,模型,路线等: http : //meanjs.org/generator.html

编辑:避免REST的另一个很好的理由是,mongodb不提供这个开箱即用的API,所以你不能使用localhost mongodb运行testing,也不能在两者之间托pipe你的本地REST服务。 事实上,你只能运行你的应用程序对付提供这个API的mongo提供程序,比如mongolab,所以如果你想尝试mongodb的MMS或者切换到不同的提供者,比如compose.io,你可能不得不切换回本地驱动无论如何。