【发布时间】:2020-03-08 01:28:19
【问题描述】:
我有一个config 文件:
const _ = require('lodash');
const config = require('./config.json');
const defaultConfig = config.development;
const environment = process.env.NODE_ENV || 'development';
const environmentConfig = config[environment];
const finalConfig = _.merge(defaultConfig,environmentConfig);
global.gConfig = finalConfig;
global.lodash = _;
服务器文件:
const express = require('express');
// environment variables
process.env.NODE_ENV = 'development';
const config = require('./config/config.js');
// module variables
const app = express();
app.get('/', (req, res) => {
res.json(global.lodash.compact([null,1,2,null,"",3]));
});
app.listen(global.gConfig.node_port, () => {
});
当我尝试访问服务器文件中的全局变量时,我需要config.js。没有它,它会显示一个错误。那我们怎么能说它是一个全局变量呢?还有其他方法吗?
我正在使用Node 8.x
【问题讨论】:
-
我不知道为什么它不起作用,但这是一个糟糕的设计。只需从您的 config.js 文件中导出配置,然后将其
require()导出到您需要的任何地方。这是 node.js 的推荐架构,原因有很多。由于模块被缓存,第二次require()相同的模块,没有实际的代码运行 - 它只是返回给你以前加载的模块。它安全高效,没有使用全局变量的问题。 -
require('./config/config.js')将加载config.js,从而执行您在该文件中所做的分配。没有它,没有任何东西被分配给global,值将是undefined。我建议避免使用全局变量 - see my answer below -
@AndreasPizsa - 你没有看到服务器文件已经有
const config = require('./config/config.js');吗?他们已经在加载它了。 -
@jfriend00 OP 写道“我需要 config.js。没有它,它会显示错误。那我们怎么能说它是一个全局变量呢?”。似乎 OP 想要更好地了解 globals 和
require的工作原理。 -
@AndreasPizsa - 嗯,好吧,这不是我理解问题的方式,但我想这可能是他们的意思。有点不清楚的问题,IMO。我以为他们是在说他们写的代码不起作用。