eval如何与nodejs一起使用?

时间:2015-05-29 16:11:51

标签: node.js

我想说:

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中的任何文件中使用它们吗?

1 个答案:

答案 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');