节点js require()[env]未定义

时间:2018-07-12 01:25:03

标签: javascript node.js

尝试理解项目的节点的新手。该项目可以很好地在Windows计算机上的dev上加载,但是会在Azure App Services上引发此错误。

TypeError: Cannot read property 'database' of undefined

尝试时: config.database,例如index.js

models / index.js

const env = process.env.NODE_ENV || "development";
const config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
>>> var whatever = config.database; <<<

config / config.json

{
  "development": {
    "logging": false, 
    "dialect": "mssql",
    "username": "whatever",
    "password": "whatever",
    "database": "whatever",
    "host": "whatever",
    "dialectOptions": {
      "encrypt": true
    }
  }
}

不知道从哪里开始,因为它在本地运行良好。文件位置似乎正确,path有效,path.join()工作正常...

谢谢!

1 个答案:

答案 0 :(得分:2)

这里实际上只有一种主要可能性,您需要做一些自己的调试来验证它。

因为此语句不会产生错误:

const config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];

这意味着require(path.join(__dirname, '..', 'config', 'config.json'))返回一个Javascript对象。因此,在您构造的路径上确实必须有一个文件,并且在您require()时它必须为您提供一个对象。

但是,错误本身:TypeError: Cannot read property 'database' of undefined尝试引用config.database时表示configundefined。发生的唯一方法是您使用的env值不在配置对象中。

这就像尝试这样做:

const obj = {development: {someKey: "someValue"}};  // what require() gives you
const env = "test";                                 // your value for env
const config = obj[env];                            // reading non-existent [env] property
console.log(config);                                // undefined

因此,将console.log(env)添加到代码中以查看env的实际含义,然后验证配置数据结构中是否有针对该特定值的对象(或在环境中设置所需的值) )。

如果在发布之前通过基本的调试步骤验证了env的价值,那么您可能会解决自己的问题(希望您可以学习简单的技术来解决更多自己的问题)。

如果您不遵循我所有的原始逻辑,也可以像这样调试它:

const env = process.env.NODE_ENV || "development";
console.log("env: ", env);

const configPath = path.join(__dirname, '..', 'config', 'config.json');
console.log("configPath: ", configPath);

const configObj = require(configPath);
console.log("configObj: ", configObj);

const config = configObj[env];
console.log("config: ", config);