Skip to content

Instantly share code, notes, and snippets.

@SamSamskies
Created May 13, 2013 02:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SamSamskies/5565796 to your computer and use it in GitHub Desktop.
Save SamSamskies/5565796 to your computer and use it in GitHub Desktop.
var express = require('express')
, http = require('http')
, path = require('path')
, fs = require('fs')
, pg = require('pg')
, orm = require('orm')
, routes = require('./routes')
, discover = require('./routes/discover')
, campgrounds = require('./routes/campgrounds')
, checkout = require('./routes/checkout')
, explore = require('./routes/explore');
// creates a new application instance of express
var app = express();
// setting up env variables (things we set we can get). we use process.env so that things will work on Heroku
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set('dbConnection', process.env.DATABASE_URL || "postgres://webuser:breathe@localhost/hipcamp")
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
// makes connecton to database using node-orm2 as middleware
app.use(orm.express(app.get('dbConnection'), {
define: function (db, models){
models.campgrounds = db.define("campgrounds", {
name : String,
lat : Number,
lng : Number
});
models.ca_cities = db.define("ca_cities", {
name : String,
lat : Number,
lng : Number
});
db.sync(); // updates db schema when server is restarted & pgsql server is running
}, // closes 'define'
})); // closes app.use
// putting this under ORM, per dox
app.use(app.router);
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
// routes
app.get('/', routes.index);
app.get('/explore', explore.explore);
app.post('/discover', discover.getCampgrounds);
app.get('/:campground/:campgroundID', campgrounds.getCampgroundDetails);
app.get('/:campground/checkout', checkout.charge);
app.get("/geocodeCities", function (req, res) {
// req.models is a reference to models used above in define()
(function() {
var readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('caCities'),
output: process.stdout,
terminal: false
});
rd.on('line', function(line) {
var name = line.replace(" ", "+");
var reqUri = "http://maps.googleapis.com/maps/api/geocode/json?address=" + name + ",+CA&sensor=false";
http.get(reqUri, function(res) {
var data = '';
res.on('data', function(chunk){
data += chunk;
});
res.on('end', function(){
var dataObj = JSON.parse(data);
var latlng = dataObj.results[0].geometry.location;
var lat = latlng.lat;
var lng = latlng.lng;
req.models.ca_cities.create([
{ name: line.trim(),
lat: lat,
lng: lng
}
], function (err, items) {
if(err) console.log(err);
console.log("cities: " +items);
}
);
} // res.on('end')
).on('error', function(e){
console.log('uhoh!! ERROR: ' + e.message);
}); // res.on('error')
}); // http
}); // res.on('line')
})(); // readCities
});
// create server
http.createServer(app).listen(app.get('port'), function(){
console.log('holla on port ' + app.get('port'));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment