Javascript引用它自己的对象内部的值

时间:2017-04-19 02:33:14

标签: javascript node.js scope this

我的Node.js应用程序的配置文件如下所示:

// 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:undefined@rabbitmq

我尝试了多种方法,例如:

  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. 创建一个自我值并指定'this'并引用它:

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

    ...

  3. 我无法让范围正常工作。我错过了什么基本的东西?我怎样才能做到这一点? 请帮忙。

2 个答案:

答案 0 :(得分: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'
    }
  }
};

答案 1 :(得分: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;