我想说:
eval(
db_config = {
host: 'localhost',
user: 'root',
database: 'forum',
password: 'test'
}
);
var gamefunctions = require('gamefunctions.js');
我可以在db_config
内的任何位置使用gamefunctions.js
,而无需通过参数传递它。那非常整洁。但是,这是不好的做法吗?
我问这是因为如果我这样做:
var db_config = {
host: 'localhost',
user: 'root',
database: 'forum',
password: 'test'
}
var gamefunctions = require('gamefunctions.js');
我在db_config
中使用它时, gamefunctions.js
变为未定义。而且我必须通过每个不同函数的参数传递它,这看起来像evaling
它首先会节省时间和代码,这有什么缺点吗?
eval
基本上只是为您定义全局范围内的变量,因此可以在nodejs中的任何文件中使用它们吗?
答案 0 :(得分:0)
你做错了2件事,并且有更优雅的解决方案。
要解释你做错了什么,首先要使用全局变量。其次,您要在代码中存储敏感信息 - 您的数据库密码!此外,它不会很便携。假设您要在具有其他数据库凭据的另一台计算机上运行它,您最终将不必要地更改您的代码。
您需要将其存储为环境变量。如果您最终托管它,某些环境会自动为您设置这些环境,以便您可以在应用中使用它们。例如,openshift会有一个$OPENSHIFT_MONGODB_DB_HOST
,它会告诉您在应用程序中使用它来连接到它的数据库。
您需要创建一个单独的文件来存储您可以从其他文件中获取的db_config
。
所以你可以创建一个看起来像这样的db_config.js
var config = {};
config.host = process.env.HOST || 'localhost';
config.user = process.env.USER || 'root';
config.password = process.env.password;
module.exports = config;
然后你可以安全地传递敏感信息,如来自控制台的密码
$ password=pass
$ node index.js
至于在你的gamefunctions.js
中获取所有信息,你需要做的就是需要它
var db_config = require('./db_config');