I wouldn't do the try..catch at all, I'd just do a fs.exists(..) call to 
see if the files were there before requiring them.  

On Wednesday, January 30, 2013 5:45:01 AM UTC-5, Norman Khine wrote:
>
> i have this code from an node.js/express application i am trying to 
> develop:
>
> var blade = require('blade')
>     ,express = require('express')
>     ,http = require('http')
>     ,https = require('https')
>     ,fs = require('fs')
>     ,nowjs = require('now')
>     ,City = require('geoip').City,json;
>
> var city = new City('data/GeoLiteCity.dat' );
>
> var GOOGLE_API_KEY = process.env.GOOGLE_API_KEY;
>
> var TABLE_ID = "1epTUiUlv5NQK5x4sgdy1K47ACDTpHH60hbng1qw";
> //var TABLE_ID ="1obpi0bmSDILX1cIQcVRNi1lUkm2K5xBFztmRFiM"
>
> var GOOGLE_PATH = 
> "/fusiontables/v1/query?sql=SELECT%20*%20FROM%20"+TABLE_ID+"&key="+GOOGLE_API_KEY;
> var GOOGLE_DRIVE_PATH = "/drive/v2/files/"+TABLE_ID+"?key="+GOOGLE_API_KEY;
>
> var options = {
>     hostname: 'www.googleapis.com'
>     ,port: 443
>     ,method: 'GET'
> };
>
> var lastModifiedDate = '';
>
> TZMNetwork(TABLE_ID);
>
> function TZMNetwork(fileId) {
>     if (fs.existsSync("data/chapters.json")) {
>         var x = '';
>         options["path"] = GOOGLE_DRIVE_PATH;
>         var req = https.request(options, function(res) {
>           res.on('data', function(d) {
>               x += d.toString();
>               //console.log(d.toString());
>           }).on('end', next);
>         });
>         req.end();
>         
>         req.on('error', function(e) {
>           console.error(e);
>         });
>         
>         function next() {
>             var l = JSON.parse(x);
>             var modifiedDate = l.modifiedDate.toString();
>             if (!lastModifiedDate === modifiedDate) {
>                 console.log('chapters.json is out of date');
>                 getChapters();
>             }
>             //console.log(l.modifiedDate);
>             //options['modifiedDate'] = l.modifiedDate.toString();
>             lastModifiedDate += l.modifiedDate.toString();
>         }
>         console.log('OK');
>     } else {
>         getChapters();
>     }
> }
>
> function getChapters() {
>     options["path"] = GOOGLE_PATH;
>     var file = fs.createWriteStream("data/chapters.json");
>     var req = https.request(options, function(res) {
>       res.on('data', function(data) {
>           file.write(data);
>       }).on('end', function() {
>           file.end();
>           console.log("chapters.json created");
>       });
>     });
>     req.end();
>     
>     req.on('error', function(e) {
>       console.error(e);
>     });
> }
>
> function dumpError(err) {
>   if (typeof err === 'object') {
>     if (err.message) {
>       console.log('\nMessage: ' + err.message)
>     }
>     if (err.stack) {
>       console.log('\nStacktrace:')
>       console.log('====================')
>       console.log(err.stack);
>     }
>   } else {
>     console.log('dumpError :: argument is not an object');
>   }
> }
>
> var app = express();
> app.use(blade.middleware(__dirname + '/views') ); //for client-side 
> templates
> app.use(express.favicon(__dirname + '/public/images/favicon.ico'));
> app.use(express.static(__dirname + '/public') ); //maybe we have some 
> static files
> //app.use(blade.middleware(__dirname + '/views') ); //for client-side 
> templates
> app.use(express.static(__dirname + "/public") ); //maybe we have some 
> static files
> app.set('views', __dirname + '/views'); //tells Express where our views 
> are stored
> try {
>     app.set('translation', require(__dirname + 
> '/public/locales/dev/translation.json'));
>     app.set('chapters', require(__dirname + '/data/chapters.json'));
> } catch(err) {
>   dumpError(err);
>   console.log('there is no /data/chapters.json');
>   app.set('chapters', []);
> }
> app.set('view engine', 'blade'); //Yes! Blade works with Express out of 
> the box!
> app.get('/', function(req, res, next) {
>     TZMNetwork(TABLE_ID);
>     console.log(lastModifiedDate);
>     res.render('index');
> });
> app.get( '/map', function( req, res, next ) { 
>     var ip = ( req.connection.remoteAddress !== "127.0.0.1" )?
>     req.connection.remoteAddress: "72.196.192.58";
>     city.lookup( ip, function( err, loc ) { 
>         if ( err ) { 
>             loc = {};
>         }
>         res.render( 'map', { loc: loc } );
>     });
> });
>
> app.locals.pretty=true;
> app.listen(29080);
> console.log('Server running at http://127.0.0.1:29080/');
>
>
> basically when the applications starts, i have this try/catch:
>
> try {
>     app.set('translation', require(__dirname + 
> '/public/locales/dev/translation.json'));
>     app.set('chapters', require(__dirname + '/data/chapters.json'));
> } catch(err) {
>   dumpError(err);
>   console.log('there is no /data/chapters.json nor translation.json');
>   app.set('translation', []);
>   app.set('chapters', []);
> }
>
> which checks if these files exist, if not it sets and empty array!
>
> what will be the correct way to call the TZMNetwork()function and then 
> reset the app.set('chapters', require(__dirname + '/data/chapters.json')); or 
> do the 'try'/catch again?
>
> also, the TZMNetwork()function checks to see if the lastModifiedDate has 
> changed and if it has then it creates a new chapters.json file; this 
> check is also done when the user accesses the root of the application.
>
> is there a better way to do this?
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
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 post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
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 nodejs+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to