2017-04-19 59 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' 
    } 
    } 
};