如何在nodejs中定义运行时的属性

时间:2013-06-29 13:17:52

标签: javascript node.js

我在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

我正在努力如何做到这一点。我尝试过以下方法:

  1. url: getDataUrl()这个产生:TypeError:无法读取未定义的属性'db'
  2. 调用getDataUrl()然后写入属性,但这不会覆盖url属性。当我读取该值时,会发生以下错误:Cannot read property 'url' of undefined
  3. config.db.url = getDataUrl();这也不会覆盖url属性。
  4. 我是JavaScript和nodejs的新手,因此我不知道如何实现这种行为,或者甚至是否可能。

2 个答案:

答案 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;
}