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

标签 javascript angularjs node.js mongodb mongoose

我正在大致围绕此处找到的演示创建一个 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 ,您绝对应该使用 native 驱动程序。

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

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

我想这里的优点是它可以省去您必须编写自己的快速 API 层的麻烦,因为您的客户端实际上只是直接使用 mongolab 的 API 结构。但我认为这是以灵 active 和性能为代价的。

native 驱动程序还可以比 REST API 做更多的事情。除了更好的性能,如果您的查询返回大型数据集, native 驱动程序会为您提供类似 cursors 的东西和 streams .使用 REST 客户端,您的查询结果将被分页。

不幸的是,如果您构建的应用程序与 angular-app 的结构非常接近,那么迁移到 mongoose 可能不是一件容易的事,这将意味着客户端和服务器中的模型级代码发生变化。

然而,对于好的 mongoose+angular 示例,meanjs.org 有一个很好的引用实现,您可能会发现它很有用: https://github.com/meanjs/mean

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

编辑:避免使用 REST 的另一个很好的理由是 mongodb 不提供开箱即用的 API,因此如果不托管本地 REST 服务,您将无法使用本地主机 mongodb 运行测试在两者之间。事实上,您只能针对提供此 API 的 mongo 提供程序运行您的应用程序,例如 mongolab,因此如果您想要尝试 mongodb 的 MMS 或切换到不同的提供程序(如 compose.io),您可能必须切换回无论如何 native 驱动程序。

关于javascript - 切换到 Mongoose ,我不应该使用请求客户端吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29527492/

相关文章:

JavaScript "window": What is its purpose? 它有什么作用?

javascript - 如何让 Nightmare 强制超时

javascript - 将 CSS 类附加到元素

javascript - 从 Firestore 数组中按键/值删除项目

javascript - 切换不起作用,仅显示一项

javascript - 将环境变量传递给 React Native 主文件

node.js - 场景完成后如何停止 cucumberjs?

javascript - 在 Angular JS 中从 Controller 渲染已编译的模板

javascript - ng-显示不工作 Angular

angularjs - 使用 typescript 缩小编写的 Angular 提供者安全