繁体   English   中英

从方法更新对象属性

[英]Updating an object attribute from a method

我试图理解为什么以下代码不起作用。 基本上,我想在Node模块中处理数据库连接,同时使用相同的数据库连接。

这是我的模块:

var MongoClient = require("mongodb").MongoClient;
var url = "mongodb://localhost:27017";

module.exports = {
  resource: null,
  connect: function() {
    MongoClient.connect(
        url,
        function(err, db) {
            if (err) throw err;
            console.log("Connected!");
            this.resource = db; // Updating the object's attribute
        }
    );
  },
};

我的主要档案:

var db = require('./db.js');
db.connect(); // Outputs "connected!"

http.createServer(function (req, res) {
  console.log(db.resource) // Outputs "null"
}).listen(8080);

资源属性永远不会更新。 我怀疑范围问题,但我不知道如何解决它。

使用的function()来定义两个exports.connect和回调MongoClient.connect使this (“上下文”)的功能体的结合来改变函数本身。 要避免此行为,请使用ES6'箭头函数语法,该语法不会更改上下文绑定:

var MongoClient = require("mongodb").MongoClient;
var url = "mongodb://localhost:27017";

module.exports = {
  resource: null,
  connect: () => {
    MongoClient.connect(
        url,
        (err, db) => {
            if (err) throw err;
            console.log("Connected!");
            this.resource = db; // Updating the object's attribute
        }
    );
  },
};

或者,您可以将connect定义移到对象外部,并通过使用完整对象路径分配exports.resource ,如下所示:

var MongoClient = require("mongodb").MongoClient;
var url = "mongodb://localhost:27017";

module.exports = {
  resource: null,
  connect: undefined
  },
};

module.exports.connect = function() {
    MongoClient.connect(
        url,
        function(err, db) {
            if (err) throw err;
            console.log("Connected!");
            module.exports.resource = db; // Updating the object's attribute
        }
    );
};

暂无
暂无

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

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