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

Switching to Mongoose, should I not use the request client?

我正在大致围绕此处找到的演示创建一个 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?这会完全干扰代理吗?

谢谢!

不,使用 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 多得多。除了更好的性能,如果您的查询 returns 大数据集,本机驱动程序会为您提供 cursors and streams 之类的东西。使用 REST 客户端,您的查询结果将被分页。

不幸的是,如果您构建的应用程序非常接近 angular-app 的结构,那么迁移到 mongoose 可能不会是一个简单的交换,这意味着模型级代码客户端和服务器的变化。

为了好的 mongoose+angular 示例,但是,meanjs.org 有一个很好的参考实现,您可能会发现它很有用: https://github.com/meanjs/mean

它还有一个很棒的 yeoman 生成器,用于生成项目、模型、路线等: http://meanjs.org/generator.html

编辑: 避免使用 REST 的另一个很好的理由是 mongodb 没有开箱即用地提供这个 API,所以你不能' t 运行 使用本地主机 mongodb 进行测试,而无需在两者之间托管本地 REST 服务。事实上,你只能 运行 你的应用程序反对 mongo 提供此 API 的提供商,例如 mongolab 所以如果你想尝试 mongo db 的彩信或切换到不同的提供商,如 compose.io 你可能不得不切换回本机驱动程序。