![](/img/trans.png)
[英]updating attribute value of a object from within a setTimeout function in Javascript
[英]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.