Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How exactly does eval work with nodejs?

Tags:

node.js

Let's say I do:

eval(
 db_config = {
                        host: 'localhost',
                        user: 'root',
                        database: 'forum',
                        password: 'test'
                    }
);

 var gamefunctions = require('gamefunctions.js');

I can use db_config anywhere inside gamefunctions.js without having to pass it through a parameter. That's pretty neat. But, is this bad practice?

Reason I ask this is because if I do:

 var db_config = {
                        host: 'localhost',
                        user: 'root',
                        database: 'forum',
                        password: 'test'
                    }


 var gamefunctions = require('gamefunctions.js');

db_config becomes undefined anytime I use it in gamefunctions.js. And I would have to pass it through a parameter on each different function which just seems like evaling it first would save time and code, any downside to this?

Does eval basically just define the variables in a global scope for you, so they can be used in any file in nodejs?

like image 581
NiCk Newman Avatar asked Oct 18 '25 00:10

NiCk Newman


1 Answers

You're doing 2 things wrong and there's much more elegant solution to this.

To explain what you're doing wrong, first is the use of globals. Second is that you're storing sensitive information in your code - your database password! And besides, it won't be very portable. Suppose you want to run it on another machine that has some other database credentials you'll end up changing your code unnecessarily.

You need to store it as environment variables. And if you end up hosting it some environments automatically have those set for you so you could use them in your app. For example openshift would have an $OPENSHIFT_MONGODB_DB_HOST that it tells you to use in your app to connect to its database.

And you need to create a separate file to store your db_config which you can require from other files.

So you might create a db_config.js which would look like this

var config = {};
config.host = process.env.HOST || 'localhost';
config.user = process.env.USER || 'root';
config.password = process.env.password;
module.exports = config;

Then you can safely just pass it the sensitive information like password from console

$ password=pass
$ node index.js

And as for having that information in your gamefunctions.js all you gotta do is require it

var db_config = require('./db_config');
like image 54
laggingreflex Avatar answered Oct 20 '25 17:10

laggingreflex



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!