我不确定下面为什么现在正在工作。以下是代码的组织方式。
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)
答案 0 :(得分:0)
当您在keys.js导出时,
module.exports = {
keys
};
你应该这样做,
module.exports = keys
然后它应该按照你的意图工作。