From 88a8a738d0325dc0894ea651d5815c113b043ac3 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Tue, 13 Jun 2017 11:00:50 -0700 Subject: [PATCH] reorganized back end routes --- helpers/socketHelpers.js | 4 +- routes/api-routes.js | 9 ++--- routes/home-routes.js | 10 +++++ routes/html-routes.js | 65 -------------------------------- routes/serve-routes.js | 32 ++++++++++++++++ routes/show-routes.js | 19 ++++++++++ routes/sockets-routes.js | 12 +----- server.js | 39 ++++++++++++++++--- views/layouts/main.handlebars | 11 +----- views/partials/topBar.handlebars | 2 +- 10 files changed, 104 insertions(+), 99 deletions(-) create mode 100644 routes/home-routes.js delete mode 100644 routes/html-routes.js create mode 100644 routes/serve-routes.js create mode 100644 routes/show-routes.js diff --git a/helpers/socketHelpers.js b/helpers/socketHelpers.js index acb07410..385a6d85 100644 --- a/helpers/socketHelpers.js +++ b/helpers/socketHelpers.js @@ -47,7 +47,7 @@ module.exports = { publish: function(name, filepath, license, nsfw, socket) { // update the client socket.emit("publish-status", "Your image is being published (this might take a second)..."); - visitor.event("Publish", "Publish Request", name, {filepath, license, nsfw}).send(); + visitor.event("Publish Route", "Publish Request", name, {filepath, license, nsfw}).send(); // create the publish object var publishParams = createPublishParams(name, filepath, license, nsfw); // get a promise to publish @@ -59,7 +59,7 @@ module.exports = { deleteTemporaryFile(filepath); }) .catch(function(error){ - visitor.event("Publish", "Publish Failure", name, {filepath, license, nsfw}).send(); + visitor.event("Publish Route", "Publish Failure", name, {filepath, license, nsfw}).send(); console.log("error:", error); socket.emit("publish-failure", handlePublishError(error)); deleteTemporaryFile(filepath); diff --git a/routes/api-routes.js b/routes/api-routes.js index 51e73142..b42cd04e 100644 --- a/routes/api-routes.js +++ b/routes/api-routes.js @@ -1,13 +1,10 @@ -var path = require('path'); -var axios = require('axios'); -var lbryApi = require('../helpers/lbryApi.js'); -module.exports = function(app){ +module.exports = function(app, axios){ // route to return claim list in json - app.get("/claim_list/:claim", function(req, res){ + app.get("/api/claim_list/:claim", function(req, res){ var claim = req.params.claim; // make a call to the daemon - axios.post('http://localhost:5279/lbryapi', { + axios.post('http://localhost:5279/lbryapi', { // to do: extrapolate into lbryApi 'claim list' method and call that method: "claim_list", params: { name: claim diff --git a/routes/home-routes.js b/routes/home-routes.js new file mode 100644 index 00000000..ddc717a2 --- /dev/null +++ b/routes/home-routes.js @@ -0,0 +1,10 @@ +module.exports = function(app){ + // route for the home page + app.get("/", function(req, res){ + res.status(200).render('index'); + }); + // a catch-all route if someone visits a page that does not exist + app.use("*", function(req, res){ + res.status(404).render('fourOhFour'); + }); +} diff --git a/routes/html-routes.js b/routes/html-routes.js deleted file mode 100644 index 2f321052..00000000 --- a/routes/html-routes.js +++ /dev/null @@ -1,65 +0,0 @@ -var path = require('path'); -var routeHelpers = require('../helpers/routeHelpers.js'); -var lbryApi = require('../helpers/lbryApi.js'); -var ua = require('universal-analytics'); -var config = require('config'); - -var googleAnalyticsId = config.get('AnalyticsConfig.googleId'); -var visitor = ua(googleAnalyticsId, {https: true}); - -module.exports = function(app){ - // route to fetch all free public claims - app.get("/:name/all", function(req, res){ - console.log(">> GET request on /" + req.params.name + " (all)"); - visitor.event("Claim Request", "Name/all", req.params.name + "/all").send(); - // create promise - lbryApi.getAllClaims(req.params.name) - .then(function(orderedFreePublicClaims){ - console.log("/:name/all success."); - res.status(200).render('allClaims', { claims: orderedFreePublicClaims }); - return; - }) - .catch(function(error){ - console.log("/:name/all error:", error); - routeHelpers.handleRequestError(error, res); - }) - }); - // route to fetch one free public claim - app.get("/:name/:claim_id", function(req, res){ - visitor.event("Claim Request", "Name/ClaimId", req.params.name + "/" + req.params.claim_id).send(); - var uri = req.params.name + "#" + req.params.claim_id; - console.log(">> GET request on /" + uri); - // create promise - lbryApi.getClaimBasedOnUri(uri) - .then(function(filePath){ - console.log("/:name/:claim_id success."); - res.status(200).sendFile(filePath); - }) - .catch(function(error){ - console.log("/:name/:claim_id error:", error) - routeHelpers.handleRequestError(error, res); - }); - }); - // route to fetch one free public claim - app.get("/:name", function(req, res){ - visitor.event("Claim Request", "Name", req.params.name).send(); - console.log(">> GET request on /" + req.params.name); - // create promise - lbryApi.getClaimBasedOnNameOnly(req.params.name) - .then(function(filePath){ - console.log("/:name success.") - res.status(200).sendFile(filePath); - }).catch(function(error){ - console.log("/:name error:", error); - routeHelpers.handleRequestError(error, res); - }); - }); - // route for the home page - app.get("/", function(req, res){ - res.status(200).render('index'); - }); - // a catch-all route if someone visits a page that does not exist - app.use("*", function(req, res){ - res.status(404).render('fourOhFour'); - }); -} diff --git a/routes/serve-routes.js b/routes/serve-routes.js new file mode 100644 index 00000000..b09d7da1 --- /dev/null +++ b/routes/serve-routes.js @@ -0,0 +1,32 @@ +module.exports = function(app, routeHelpers, lbryApi, ua, googleAnalyticsId){ + // route to fetch one free public claim + app.get("/:name/:claim_id", function(req, res){ + ua(googleAnalyticsId, {https: true}).event("Serve Route", "/name/claimId", req.params.name + "/" + req.params.claim_id).send(); + var uri = req.params.name + "#" + req.params.claim_id; + console.log(">> GET request on /" + uri); + // create promise + lbryApi.getClaimBasedOnUri(uri) + .then(function(filePath){ + console.log("/:name/:claim_id success."); + res.status(200).sendFile(filePath); + }) + .catch(function(error){ + console.log("/:name/:claim_id error:", error) + routeHelpers.handleRequestError(error, res); + }); + }); + // route to fetch one free public claim + app.get("/:name", function(req, res){ + ua(googleAnalyticsId, {https: true}).event("Serve Route", "/name", req.params.name).send(); + console.log(">> GET request on /" + req.params.name); + // create promise + lbryApi.getClaimBasedOnNameOnly(req.params.name) + .then(function(filePath){ + console.log("/:name success.") + res.status(200).sendFile(filePath); + }).catch(function(error){ + console.log("/:name error:", error); + routeHelpers.handleRequestError(error, res); + }); + }); +} \ No newline at end of file diff --git a/routes/show-routes.js b/routes/show-routes.js new file mode 100644 index 00000000..38400ce3 --- /dev/null +++ b/routes/show-routes.js @@ -0,0 +1,19 @@ + +module.exports = function(app, routeHelpers, lbryApi, ua, googleAnalyticsId){ + // route to fetch all free public claims + app.get("/:name/all", function(req, res){ + console.log(">> GET request on /" + req.params.name + " (all)"); + ua(googleAnalyticsId, {https: true}).event("Show Routes", "/name/all", req.params.name + "/all").send(); + // create promise + lbryApi.getAllClaims(req.params.name) + .then(function(orderedFreePublicClaims){ + console.log("/:name/all success."); + res.status(200).render('allClaims', { claims: orderedFreePublicClaims }); + return; + }) + .catch(function(error){ + console.log("/:name/all error:", error); + routeHelpers.handleRequestError(error, res); + }) + }); +} diff --git a/routes/sockets-routes.js b/routes/sockets-routes.js index 517a14c5..1ed42867 100644 --- a/routes/sockets-routes.js +++ b/routes/sockets-routes.js @@ -1,13 +1,4 @@ -var path = require('path'); -var siofu = require("socketio-file-upload"); -var socketHelpers = require('../helpers/socketHelpers.js'); -var ua = require('universal-analytics'); -var config = require('config'); - -var googleAnalyticsId = config.get('AnalyticsConfig.googleId'); -var visitor = ua(googleAnalyticsId, {https: true}); - -module.exports = function(app) { +module.exports = function(app, path, siofu, socketHelpers) { var http = require('http').Server(app); var io = require('socket.io')(http); @@ -23,7 +14,6 @@ module.exports = function(app) { }) uploader.on("saved", function(event){ console.log("saved " + event.file.name); - visitor.event("Publish", "Publish Request", event.file.name).send(); if (event.file.success){ socket.emit("publish-status", "file upload successfully completed"); socketHelpers.publish(event.file.meta.name, event.file.pathName, event.file.meta.license, event.file.meta.nsfw, socket) diff --git a/server.js b/server.js index 63601032..4191f922 100644 --- a/server.js +++ b/server.js @@ -4,6 +4,16 @@ var bodyParser = require('body-parser'); var path = require('path'); var siofu = require("socketio-file-upload"); var expressHandlebars = require("express-handlebars"); +var Handlebars = require('handlebars'); +var axios = require('axios'); +var config = require('config'); +var ua = require('universal-analytics'); + +var socketHelpers = require('./helpers/socketHelpers.js'); +var routeHelpers = require('./helpers/routeHelpers.js'); +var lbryApi = require('./helpers/lbryApi.js'); + +var googleAnalyticsId = config.get('AnalyticsConfig.googleId'); // set port var PORT = 3000; @@ -19,16 +29,35 @@ app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded app.use(siofu.router); -// configure handlebars -app.engine('handlebars', expressHandlebars({defaultLayout: 'main'})); +// configure handlebars & register it with Express app +var hbs = expressHandlebars.create({ + defaultLayout: 'main', // sets the default layout + handlebars: Handlebars, // includes basic handlebars for access to that library + helpers: { // define any extra helpers you may need + googleAnalytics: function(){ + var googleApiKey = config.get('AnalyticsConfig.googleId') + return new Handlebars.SafeString(``); + } + } +}); +app.engine('handlebars', hbs.engine); app.set('view engine', 'handlebars'); // require express routes -require("./routes/api-routes.js")(app); -require("./routes/html-routes.js")(app); +require("./routes/api-routes.js")(app, axios); +require("./routes/show-routes.js")(app, routeHelpers, lbryApi, ua, googleAnalyticsId); +require("./routes/serve-routes.js")(app, routeHelpers, lbryApi, ua, googleAnalyticsId); +require("./routes/home-routes.js")(app); // wrap the server in socket.io to intercept incoming sockets requests -var http = require("./routes/sockets-routes.js")(app); +var http = require("./routes/sockets-routes.js")(app, path, siofu, socketHelpers); // start server http.listen(PORT, function() { diff --git a/views/layouts/main.handlebars b/views/layouts/main.handlebars index 2746be26..45f65b77 100644 --- a/views/layouts/main.handlebars +++ b/views/layouts/main.handlebars @@ -16,15 +16,6 @@ {{{ body }}} - - @@ -33,5 +24,7 @@ + + {{ googleAnalytics }} \ No newline at end of file diff --git a/views/partials/topBar.handlebars b/views/partials/topBar.handlebars index 17f0e36a..3d406f09 100644 --- a/views/partials/topBar.handlebars +++ b/views/partials/topBar.handlebars @@ -2,7 +2,7 @@

Spee.ch is a single-serving site that reads and publishes images to and from the LBRY blockchain.