[英]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.