繁体   English   中英

为什么 mongoose.connect() 在 mongoose 对象上没有作为方法存在时工作得很好?

[英]Why mongoose.connect() works just fine when is not present as a method on the mongoose object?

鉴于以下代码:

var mongoose = require("mongoose");
console.log(mongoose);

mongoose.connect("my database url here")

如何一切正常 - 但猫鼬对象没有附加任何 connect() 方法? 这是 console.log 打印:

Mongoose {
      connections: 
       [ NativeConnection {
           base: [Circular],
           collections: {},
           models: {},
           config: [Object],
           replica: false,
           hosts: null,
           host: null,
           port: null,
           user: null,
           pass: null,
           name: null,
           options: null,
           otherDbs: [],
           _readyState: 0,
           _closeCalled: false,
           _hasOpened: false,
           _listening: false } ],
      plugins: [],
      models: {},
      modelSchemas: {},
      options: { pluralization: true } }

不要误会我的意思,我喜欢魔法的东西——但当我试图深入理解整个平均堆栈如何组合在一起时,我就不喜欢了。 这次我没有错误这一事实对我没有帮助。 我所知道的 - 应该是这样的:

var myObj = {
    someMethodLikeConnect: function(nonBoringParameter){
      //and now this is a method.
    }
}
console.log(myObj); // it prints corectly
myObj.someMethodLikeConnect("foo"); // this works and it's expected.
myObj.connect("some URL"); // this gives: "myObj.connect is not a function" Error and it's also expected.

有没有像原型继承这样的东西? 我的意思是这个 connect() 方法在 mongoose 对象上不存在,而是形成另一个更高级别的东西(由节点上下文或 smth 构建 - 因为节点如何识别我们正在使用“mongoose”模块而不是“myObj”? ) -> 这就是为什么我的控制台没有记录它? 或者我错过了一些关于 JavaScript 工作原理的基本知识?

这是一个 nodejs 应用程序 - 我使用 Cloud9。 我也是编程新手。 让你花时间阅读这篇文章:)

你的预感是正确的,这里有原型继承。

下面是connect方法的代码:

Mongoose.prototype.connect = function() {
  var conn = this.connection;
  if (rgxReplSet.test(arguments[0]) || checkReplicaSetInUri(arguments[0])) {
    return new MongooseThenable(this, conn.openSet.apply(conn, arguments));
  }

  return new MongooseThenable(this, conn.open.apply(conn, arguments));
};
Mongoose.prototype.connect.$hasSideEffects = true;

当您单独记录 Mongoose 对象时,它只会包含该对象内部的内容,而不是其原型。

现在,如果您实例化一个新的 Mongoose 对象并记录它? 它将具有相关功能。

看一下我制作的这个快速 JSBin 以确切了解我的意思: JSBIN LINK

请注意此处的 Mongoose 文档,单击连接示例底部的“查看代码”:

相关文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM