我基于这里的演示松散地创建了一个MEAN堆栈应用程序:https://github.com/angular-app/angular-app
我是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);
});
};
服务器的配置方式也是代理对mongolab REST API的调用(在此处找到:https://github.com/angular-app/angular-app/blob/master/server/lib/mongo-proxy.js)。
我不确定应用程序使用请求而不是mongod native或mongoose是否有特定原因,但为了开始使用mongoose,我只是删除请求客户端并开始使用mongoose?这会干扰代理吗?
谢谢!
答案 0 :(得分:1)
不,使用猫鼬,你绝对应该使用原生驱动程序。
在angular-app项目中,您提到mongolab API一直代理到客户端代码:
https://github.com/angular-app/angular-app/blob/master/client/vendor/mongolab/mongolab-resource.js
我认为这样做的好处是可以省去编写自己的快速API层的麻烦,因为您的客户端实际上只是直接使用mongolab的API结构。但我认为这是以灵活性和性能为代价的。
本机驱动程序也可以比REST API做更多的事情。除了更好的性能之外,如果您的查询返回大型数据集,则本机驱动程序会为您提供cursors和streams之类的内容。使用REST客户端,您的查询结果将被分页。
不幸的是,如果您构建的应用程序与angular-app的结构非常接近,那么移动到mongoose可能不会轻易交换,这意味着客户端和服务器中的模型级代码更改。
但是对于好的mongoose + angular示例,meanjs.org有一个很好的参考实现,你可能会发现它很有用: https://github.com/meanjs/mean
它还有一个梦幻般的自动生成器,用于生成项目,模型,路线等: http://meanjs.org/generator.html
编辑:避免使用REST的另一个好理由是,mongodb并不提供开箱即用的API,因此您无法使用localhost mongodb运行测试而无需托管两者之间的本地REST服务。事实上,您只能针对提供此API的mongo提供商运行您的应用,例如mongolab,所以如果您想尝试使用mongodb的彩信或切换到其他提供商,例如compose.io,您可能无论如何都必须切换回原生驱动程序。