javascript属性赋值

时间:2018-02-04 03:11:03

标签: javascript node.js

我不确定下面为什么现在正在工作。以下是代码的组织方式。

keys.js - 拥有所有密钥和密码 env.js - 根据环境(DEV,PROD等)切换密钥,并将它们分配给ENV.KEYS属性,然后将其导出以供应用程序的其余部分使用 db.js - 尝试使用MONGODB属性但由于ENV.KEYS未定义而失败

从输出中可以看出,我可以在env,js中的keys.js中读取 - 但我无法分配KEYS:基于switch语句的keys.DEV无法正常工作。我不知道为什么。

任何帮助都会非常有用。

keys.js

const keys = {
  LOCAL: {
    GOOGLE: {
      CLIENT_ID: 'a1',
      CLIENT_SECRET: 'b1',
      CALLBACK_URL: 'c1'
    },
    MONGODB: {
      URI: 'd1'
    },
    COOKIE: {
      KEYS: ['e1', 'f1', 'g1']
    }
  },
  DEV: {
    GOOGLE: {
      CLIENT_ID: 'a2',
      CLIENT_SECRET: 'b2',
      CALLBACK_URL: 'c2'
    },
    MONGODB: {
      URI: 'd2'
    },
    COOKIE: {
      KEYS: ['e2', 'f2', 'g2']
    }
  },
  PROD: {
    GOOGLE: {
      CLIENT_ID: '',
      CLIENT_SECRET: '',
      CALLBACK_URL: ''
    },
    MONGODB: {
      URI: ''
    },
    COOKIE: {
      KEYS: []
    }
  }
};

module.exports = {
  keys
};

env.js

var keys = require('./keys');

var setEnv = function() {
  console.log(keys);
  console.log(keys.DEV);

  switch (process.env.NODE_ENV) {
    case 'LOCAL':
      return {
        KEYS: keys.LOCAL,
        PORT: process.env.PORT || 3000
      };

    case 'DEV':
      return {
        KEYS: keys.DEV,
        PORT: process.env.PORT || 3000
      };

    case 'PROD':
      return {
        KEYS: keys.PROD,
        PORT: process.env.PORT || 80
      };

    default:
      return {
        KEYS: keys.DEV,
        PORT: process.env.PORT || 3000
      };
  }
};

var ENV = setEnv();
console.log(ENV);

module.exports = {
  ENV
};

db.js

const mongoose = require('mongoose');
const ENV = require('./env');

mongoose.Promise = global.Promise;
mongoose.connect(ENV.KEYS.MONGODB.URI, {
  // useMongoClient: true
});

module.exports = {
  mongoose
};

执行时,我将ENV.KEYS视为未定义。我做错了什么?

[nodemon] starting `node server.js`
{ keys:
   { LOCAL: { GOOGLE: [Object], MONGODB: [Object], COOKIE: [Object] },
     DEV: { GOOGLE: [Object], MONGODB: [Object], COOKIE: [Object] },
     PROD: { GOOGLE: [Object], MONGODB: [Object], COOKIE: [Object] } } }
undefined
{ KEYS: undefined, PORT: 3000 }
C:\projects\test\server\config\db.js:5
mongoose.connect(ENV.KEYS.MONGODB.URI, {
                         ^

TypeError: Cannot read property 'MONGODB' of undefined
    at Object.<anonymous> (C:\projects\test\server\config\db.js:5:26)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)
    at Module.require (module.js:513:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (C:\projects\test\server\server.js:10:18)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)
    at Function.Module.runMain (module.js:605:10)
    at startup (bootstrap_node.js:158:16)

1 个答案:

答案 0 :(得分:0)

当您在keys.js导出时,

module.exports = {
  keys
};

你应该这样做,

module.exports = keys

然后它应该按照你的意图工作。