尝试理解项目的节点的新手。该项目可以很好地在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()
工作正常...
谢谢!
答案 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
时表示config
是undefined
。发生的唯一方法是您使用的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);