Thanks for the hint. I switched to using exitsSync and writeFileSync and
that solved the problem. As you point out though, exists is depreciated so
I need to switch to stat.
Thanks!
On Saturday, March 19, 2016 at 10:26:20 AM UTC-4, Daniel R. wrote:
>
> A few comments:
> 1) Not sure what version of node you are using but fs.exists is deprecated
> with fs.stat being one of the recommended replacements.
> 2) Using either fs.exists or fs.stat both are asynchronous function so
> will not immediately execute the callback function which means the
> following require happens immediately.
> 3) If you did use the synchronous version of fs.stat, depending on how
> paranoid you want to be, there is a potential race condition between the
> stats check and require call.
>
> An alternative approach would be to use the fact that require is a
> synchronous function and will throw an error with a specific code if the
> module can't be found:
>
> var fs = require('fs');
>
> // initialize with defaults
> var config = {
> port: 8282
> };
> try {
> // attempt to override the defaults
> config = require('./config.json');
> } catch (error) {
> // only handle a missing module error
> if (error.code !== 'MODULE_NOT_FOUND') {
> throw error;
> }
> // asynchronously write out the default config
> fs.writeFile('./config.json', JSON.stringify(config), function(error) {
> if (error) {
> throw error;
> }
> });
> }
>
> // at this point config will be the default if config.json didn't exist
> // or the contents of config.json if it did exist
> console.log(config);
>
>
> -- Daniel R. <[email protected] <javascript:>> [http://danielr.neophi.com/
> ]
>
> On Thu, Mar 17, 2016 at 12:35 PM, Noel Hibbard <[email protected]
> <javascript:>> wrote:
>
>> I am brand new to Node and so far things have gone smooth but I am trying
>> to put some settings in a config.json and use require to load them. My
>> problem is the first time the tool runs the file does not exist so I wrote
>> some code to check to see if it exists and if not I create a default config
>> file and then once it's created I load it with require. My problem is it
>> seems to be executing require before my code that creates the default
>> config and then throws an error.
>>
>> Here is some sample code, I must be missing something basic:
>> var fs = require('fs');
>>
>> fs.exists('./config.json', (exists) => {
>> if(!exists)
>> {
>> fs.writeFile('./config.json', '{ "port" : "8282"}', function
>> (err) {
>> if (err) return console.log(err);
>> });
>> }
>> });
>>
>> var config = require('./config.json');
>>
>> console.log(config.port);
>>
>> Thanks!
>>
>> --
>> Job board: http://jobs.nodejs.org/
>> New group rules:
>> https://gist.github.com/othiym23/9886289#file-moderation-policy-md
>> Old group rules:
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "nodejs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/nodejs/68a2c764-ee59-441f-9cf0-e5dc89837513%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/nodejs/68a2c764-ee59-441f-9cf0-e5dc89837513%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
Job board: http://jobs.nodejs.org/
New group rules:
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/nodejs/33c487d5-e74c-424f-8550-c57e8187fe5b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.