2017-04-19 52 views
1

我有一个配置文件为我的Node.js应用程序,它看起来是这样的:的JavaScript对象是自内引用值

// Development specific configuration 
// ================================== 
module.exports = { 

.... 

    ip: "localhost", 
    //Rabbit MQ 
    rabbitmq: { 
    username: 'foo', 
    password: 'bar', 
    ip: 'amqp://'+this.username+':'+this.password+'@rabbitmq', 
    queues: { 
     name: 'foo' 
    } 
    }, 
.... 

}; 

这里是模块的样子,我使用这个配置文件:

var config = require ('../../config/environment'); 
this.con = amqp.connect (config.rabbitmq.ip); 

我收到未定义的用户名和密码:

amqp://undefined:[email protected] 

我已经尝试了多种方法如:

  1. 创建getter函数对象内部这样的:

    rabbitmq: { 
    username: 'foo', 
    password: 'bar', 
    getUsername: function(){ 
        return this.username; 
    }, 
    getpassword: function(){ 
        return this.password; 
    }, 
    ip: 'amqp://'+this.getUsername()+':'+this.getpassword()+'@rabbitmq', 
    
  2. 创建自值并分配 '这个' 和引用它:

    self: this, 
    ... 
    ip: 'amqp://'+self.rabbitmq.username+':'+self.rabbitmq.password+'@rabbitmq', 
    

    ..

我不能g将范围正确地工作。我缺少一些基本的东西吗?我怎样才能做到这一点? 请帮忙。

+0

你能试试这个ip:'amqp://'+ username +':'+ password +'@ rabbitmq', –

+0

ip:'amqp://'+ username +':'+ password +' @rabbitmq', ^ ReferenceError:用户名未定义 – TitaniuM

+0

作为表达式的一部分 - “this”包含您正在运行的当前范围的值。所以你想做的事情是不可能的(并且不需要诚实)。 – zerkms

回答

0

你可以做这样的事情:

var config = { 
    ip : "localhost", //Rabbit MQ 
    rabbitmq : { 
     username : 'foo', 
     password : 'bar', 
     queues : { 
      name : 'foo' 
     } 
    } 
}; 

config现在是在模块范围内声明的,因此可以重用它的价值

config.rabbitmq.ip = 'amqp://' + config.rabbitmq.username + ':' + config.rabbitmq.password + '@rabbitmq'; 
module.exports = config; 
0

这将工作:

var username = 'foo'; 
var password = 'bar'; 

module.exports = { 
    ip: "localhost", 
    //Rabbit MQ 
    rabbitmq: { 
    username: username, 
    password: password, 
    ip: 'amqp://'+username+':'+password+'@rabbitmq', 
    queues: { 
     name: 'foo' 
    } 
    } 
};