我在nodejs中为我的数据库访问定义了以下属性。问题是我还需要为某个函数定义的url参数。因此,我编写了辅助函数getDataUrl()
var config = {
db: {
db: 'dbname', // the name of the database
host: "12.12.12.12", // the ip adress of the database
port: 10091, // the port of the mongo db
username: "name", //the username if not needed use undefined
password: "pw", // the password for the db access
url: undefined // also tried url: getDataUrl()
}
};
function getDataUrl() {
var dataUrl = "mongodb://";
if (config.db.username !== undefined) {
dataUrl += config.db.username + ':' + config.db.password + '@';
}
dataUrl += config.db.host + ":" + config.db.port;
dataUrl += '/' + config.db.db
return dataUrl;
}
module.exports = config;
但是我不想调用此函数,而是使用属性config.db.url
。
我正在努力如何做到这一点。我尝试过以下方法:
url: getDataUrl()
这个产生:TypeError:无法读取未定义的属性'db'getDataUrl()
然后写入属性,但这不会覆盖url属性。当我读取该值时,会发生以下错误:Cannot read property 'url' of undefined
config.db.url = getDataUrl();
这也不会覆盖url属性。我是JavaScript和nodejs的新手,因此我不知道如何实现这种行为,或者甚至是否可能。
答案 0 :(得分:1)
您可以尝试getter property:
var config = {
db: {
db: 'dbname', // the name of the database
host: "12.12.12.12", // the ip adress of the database
port: 10091, // the port of the mongo db
username: "name", //the username if not needed use undefined
password: "pw", // the password for the db access
get url() {
var dataUrl = "mongodb://";
if (this.username)
dataUrl += this.username + ':' + this.password + '@';
dataUrl += this.host + ":" + this.port + '/' + this.db;
return dataUrl;
}
}
};
console.log(config.db.url); // automatically computed on [every!] access
答案 1 :(得分:0)
修复
写url:getDataUrl()这产生:TypeError:无法读取属性 'db'未定义
你应该在getDataUrl()函数中将“configs”变量更改为“config”:
function getDataUrl() {
var dataUrl = "mongodb://";
if (config.db.username !== undefined) {
dataUrl += config.db.username + ':' + config.db.password + '@';
}
dataUrl += config.db.host + ":" + config.db.port;
dataUrl += '/' + config.db.db
return dataUrl;
}