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

Javascript 如何在nodejs中定义运行时属性,javascript,node.js,Javascript,Node.js,我已经为nodejs中的数据库访问定义了以下属性。问题是,我还需要为某个函数定义url参数。因此,我编写了helper函数getDataUrl() 但是,我不想调用此函数,而是使用属性config.db.url 我目前正在努力如何做到这一点。我尝试了以下方法: 写入url:getDataUrl()此生成:类型错误:无法读取未定义的属性“db” 调用getDataUrl(),然后写入属性,但这不会覆盖url属性。然后读取该值时发生以下错误:无法读取未定义的属性“url” 写入config.db.u

我已经为nodejs中的数据库访问定义了以下属性。问题是,我还需要为某个函数定义url参数。因此,我编写了helper函数
getDataUrl()

但是,我不想调用此函数,而是使用属性
config.db.url

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

  • 写入
    url:getDataUrl()
    此生成:类型错误:无法读取未定义的属性“db”
  • 调用
    getDataUrl()
    ,然后写入属性,但这不会覆盖url属性。然后读取该值时发生以下错误:
    无法读取未定义的属性“url”
  • 写入
    config.db.url=getDataUrl()这也不会覆盖url属性
  • 我对JavaScript和nodejs非常陌生,因此我不知道如何实现这种行为,甚至不知道它是否可能

    写入url:getDataUrl()此生成:类型错误:无法读取属性 未定义的“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;
    }
    
    你可以试试:


    你在#2和#3中所说的“这不会覆盖url属性”是什么意思,你如何看待这个结果?它应该可以工作,但当我读取这些值时,我假设这与异步调用有关,或者与异步调用无关?我已经做了一个更新。正如@MartinLinux所观察到的,您在函数中使用了
    configs
    而不是
    config
    。修正错误,2和3就行了。并使用strict模式,以便对未声明的变量抛出有意义的异常!对不起,这是问题中的一个输入错误,我已经更新了问题。这正是我需要的,谢谢。
    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;
    }
    
    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