Commit e95e3f84a5c6da7529f29f58de2598718bd6b535

Authored by Sing Chung Xiao
1 parent 038abefbdd
Exists in master

Refactored code for Nodejs and Heroku, added a landing page.

Showing 16 changed files with 348 additions and 55 deletions Side-by-side Diff

  1 +TIMES=2
  1 +web: node index.js
  1 +# node-js-getting-started
  2 +
  3 +A barebones Node.js app using [Express 4](http://expressjs.com/).
  4 +
  5 +This application supports the [Getting Started with Node on Heroku](https://devcenter.heroku.com/articles/getting-started-with-nodejs) article - check it out.
  6 +
  7 +## Running Locally
  8 +
  9 +Make sure you have [Node.js](http://nodejs.org/) and the [Heroku Toolbelt](https://toolbelt.heroku.com/) installed.
  10 +
  11 +```sh
  12 +$ git clone git@github.com:heroku/node-js-getting-started.git # or clone your own fork
  13 +$ cd node-js-getting-started
  14 +$ npm install
  15 +$ npm start
  16 +```
  17 +
  18 +Your app should now be running on [localhost:5000](http://localhost:5000/).
  19 +
  20 +## Deploying to Heroku
  21 +
  22 +```
  23 +$ heroku create
  24 +$ git push heroku master
  25 +$ heroku open
  26 +```
  27 +or
  28 +
  29 +[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy)
  30 +
  31 +## Documentation
  32 +
  33 +For more information about using Node.js on Heroku, see these Dev Center articles:
  34 +
  35 +- [Getting Started with Node.js on Heroku](https://devcenter.heroku.com/articles/getting-started-with-nodejs)
  36 +- [Heroku Node.js Support](https://devcenter.heroku.com/articles/nodejs-support)
  37 +- [Node.js on Heroku](https://devcenter.heroku.com/categories/nodejs)
  38 +- [Best Practices for Node.js Development](https://devcenter.heroku.com/articles/node-best-practices)
  39 +- [Using WebSockets on Heroku with Node.js](https://devcenter.heroku.com/articles/node-websockets)
  1 +{
  2 + "name": "Start on Heroku: Node.js",
  3 + "description": "A barebones Node.js app using Express 4",
  4 + "repository": "https://github.com/heroku/node-js-getting-started",
  5 + "logo": "http://node-js-sample.herokuapp.com/node.svg",
  6 + "keywords": ["node", "express", "static"],
  7 + "image": "heroku/nodejs"
  8 +}
  1 +var express = require('express');
  2 +
  3 +var app = express();
  4 +
  5 +app.set('port', (process.env.PORT || 5000));
  6 +
  7 +app.use(express.static(__dirname + '/public'));
  8 +
  9 +// views is directory for all template files
  10 +app.set('views', __dirname + '/views');
  11 +app.set('view engine', 'ejs');
  12 +
  13 +app.get('/', function(request, response) {
  14 + response.render('pages/index');
  15 +});
  16 +
  17 +app.get('/landing', function(request, response) {
  18 + response.render('pages/landing');
  19 +});
  20 +
  21 +app.listen(app.get('port'), function() {
  22 + console.log('Node app is running on port', app.get('port'));
  23 +});
package.json View file @ e95e3f8
  1 +{
  2 + "name": "node-js-getting-started",
  3 + "version": "0.2.5",
  4 + "description": "A sample Node.js app using Express 4",
  5 + "engines": {
  6 + "node": "5.9.1"
  7 + },
  8 + "main": "index.js",
  9 + "scripts": {
  10 + "start": "node index.js"
  11 + },
  12 + "dependencies": {
  13 + "ejs": "2.4.1",
  14 + "express": "4.13.3"
  15 + },
  16 + "repository": {
  17 + "type": "git",
  18 + "url": "https://github.com/heroku/node-js-getting-started"
  19 + },
  20 + "keywords": [
  21 + "node",
  22 + "heroku",
  23 + "express"
  24 + ],
  25 + "license": "MIT"
  26 +}
public/images/temp.png View file @ e95e3f8

234 KB

public/lang-logo.png View file @ e95e3f8

2.24 KB

public/node.svg View file @ e95e3f8
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
  3 +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
  4 +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
  5 + viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
  6 +<path fill="#8CC84B" d="M255.5,495.4c-6.4,0-12.8-1.7-18.4-4.9l-58.5-34.6c-8.7-4.9-4.5-6.6-1.6-7.6c11.7-4,14-5,26.5-12
  7 + c1.3-0.7,3-0.5,4.4,0.3l45,26.7c1.6,0.9,3.9,0.9,5.4,0L433.6,362c1.6-0.9,2.7-2.8,2.7-4.7V154.9c0-2-1-3.8-2.7-4.8L258.3,49
  8 + c-1.6-0.9-3.8-0.9-5.4,0L77.7,150.1c-1.7,1-2.8,2.9-2.8,4.8v202.3c0,1.9,1.1,3.8,2.8,4.7l48,27.7c26.1,13,42-2.3,42-17.7V172.2
  9 + c0-2.8,2.3-5.1,5.1-5.1H195c2.8,0,5.1,2.2,5.1,5.1V372c0,34.8-18.9,54.7-51.9,54.7c-10.1,0-18.1,0-40.4-11l-46-26.5
  10 + c-11.4-6.6-18.4-18.8-18.4-32V154.9c0-13.1,7-25.4,18.4-32L237.1,21.7c11.1-6.3,25.8-6.3,36.8,0L449.3,123
  11 + c11.4,6.6,18.4,18.8,18.4,32v202.3c0,13.1-7.1,25.4-18.4,32L274,490.5C268.4,493.7,262,495.4,255.5,495.4z"/>
  12 +<path fill="#8CC84B" d="M309.7,356c-76.7,0-92.8-35.2-92.8-64.8c0-2.8,2.3-5.1,5.1-5.1h22.7c2.5,0,4.6,1.8,5,4.3
  13 + c3.4,23.1,13.6,34.7,60,34.7c36.9,0,52.7-8.4,52.7-28c0-11.3-4.5-19.7-61.9-25.3c-48-4.7-77.6-15.3-77.6-53.7
  14 + c0-35.4,29.8-56.5,79.8-56.5c56.2,0,84,19.5,87.5,61.3c0.1,1.4-0.4,2.8-1.3,3.9c-1,1-2.3,1.6-3.7,1.6h-22.8c-2.4,0-4.4-1.7-4.9-4
  15 + c-5.5-24.3-18.7-32-54.8-32c-40.3,0-45,14-45,24.6c0,12.8,5.5,16.5,60,23.7c53.9,7.1,79.5,17.2,79.5,55.1
  16 + C397.1,334.1,365.3,356,309.7,356z"/>
  17 +</svg>
public/stylesheets/main.css View file @ e95e3f8
  1 +#alt-routes {
  2 + height: 75px;
  3 +}
  4 +
  5 +#map {
  6 + margin-bottom: 10px;
  7 +}
  8 +
  9 +#map-top {
  10 + margin-bottom: 30px;
  11 +}
  12 +
  13 +.img-responsive {
  14 + margin: 0 auto;
  15 +}
  16 +
  17 +.status {
  18 + margin-top: 5px;
  19 +}
  20 +
  21 +.text-field {
  22 + margin-top: 30px;
  23 + margin-bottom: 30px;
  24 +}
public/views/index.html View file @ e95e3f8
1   -<!DOCTYPE html>
2   -<html lang="en">
3   - <head>
4   - <meta charset="utf-8">
5   - <!-- Ensure that Bootstrap is mobile friendly -->
6   - <meta name="viewport" content="width=device-width, initial-scale=1">
7   - <!-- Latest compiled and minified CSS -->
8   - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
9   -
10   - <!-- Optional theme -->
11   - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
12   -
13   - <!-- Latest compiled and minified JavaScript -->
14   - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> </head>
15   -
16   -
17   - <body>
18   -<!-- <nav class="fixed-nav-bar group nav-collapse">
19   - <ul class="group">
20   - <li><a href="Files/PaulWallaceResume.6.1.1.pdf" class="resume-link" target="_blank">Resume</a></li>
21   - </ul>
22   - <a href="#" id="pull" ontouchend="this.onclick=fix">Menu</a>
23   - </nav> -->
24   -
25   - <!--asdifhasdfasdfapsdbfasdfa-->
26   -
27   -
28   -
29   - <div class="container-fluid">
30   -
31   -
32   - <div class="jumbotron text-center">
33   - <h1>Safe Routes</h1>
34   - <p>The best way to find the safest routes.</p>
35   - </div>
36   -
37   - <!--What are for and type for?-->
38   -
39   - <form class="text-center">
40   - <div class="form-group text-center">
41   - <label for="currentLocation">From</label>
42   - <input type="currentLocation" class="form-control" placeholder="Enter Current Location">
43   - </div>
44   -
45   - <div class="form-group text-center">
46   - <label for="destination">To</label>
47   - <input type="destination" class="form-control" placeholder="Enter Destination">
48   - </div>
49   - <button type="submit" class="btn btn-primary">Go</button>
50   - </form>
51   -
52   - </div>
53   -
54   - </body>
55   -</html>
views/pages/db.ejs View file @ e95e3f8
  1 +<!DOCTYPE html>
  2 +<html>
  3 +<head>
  4 + <% include ../partials/header.ejs %>
  5 +</head>
  6 +
  7 +<body>
  8 +
  9 +<% include ../partials/nav.ejs %>
  10 +
  11 +<div class="container">
  12 +<h2>Database Results</h2>
  13 +
  14 +<ul>
  15 + <% results.forEach(function(r) { %>
  16 + <li><%= r.id %> - <%= r.name %></li>
  17 + <% }); %>
  18 +</ul>
  19 +
  20 +</div>
  21 +
  22 +</body>
  23 +</html>
views/pages/index.ejs View file @ e95e3f8
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 + <head>
  4 + <% include ../partials/header %>
  5 + </head>
  6 +
  7 +
  8 + <body>
  9 +<!-- <nav class="fixed-nav-bar group nav-collapse">
  10 + <ul class="group">
  11 + <li><a href="Files/PaulWallaceResume.6.1.1.pdf" class="resume-link" target="_blank">Resume</a></li>
  12 + </ul>
  13 + <a href="#" id="pull" ontouchend="this.onclick=fix">Menu</a>
  14 + </nav> -->
  15 +
  16 + <!--asdifhasdfasdfapsdbfasdfa-->
  17 +
  18 +
  19 +
  20 + <div class="container-fluid">
  21 +
  22 +
  23 + <div class="jumbotron text-center">
  24 + <h1>Safe Routes</h1>
  25 + <p>The best way to find the safest routes.</p>
  26 + </div>
  27 +
  28 + <!--What are for and type for?-->
  29 +
  30 + <form class="text-center" action="/landing">
  31 + <div class="form-group text-center">
  32 + <label for="currentLocation">From</label>
  33 + <input type="currentLocation" class="form-control" placeholder="Enter Current Location">
  34 + </div>
  35 +
  36 + <div class="form-group text-center">
  37 + <label for="destination">To</label>
  38 + <input type="destination" class="form-control" placeholder="Enter Destination">
  39 + </div>
  40 + <button type="submit" class="btn btn-primary">Go</button>
  41 + </form>
  42 +
  43 + </div>
  44 +
  45 + </body>
  46 +</html>
views/pages/landing.ejs View file @ e95e3f8
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 + <head>
  4 + <% include ../partials/header %>
  5 + </head>
  6 +
  7 +
  8 + <body>
  9 + <div class="container">
  10 +
  11 + <!-- My LOCATION -->
  12 + <div>
  13 + <input type="text" class="form-control text-field" placeholder="MY LOCATION">
  14 + </div>
  15 + <!-- Destination -->
  16 + <div>
  17 + <input type="text" class="form-control text-field" placeholder="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna...">
  18 + </div>
  19 +
  20 + <!-- Buttons and status information on top of the map. -->
  21 + <div class="container" id="map-top">
  22 + <div class="row">
  23 + <!-- Status -->
  24 + <div class="col-xs-6">
  25 + <!-- Title: Current Route -->
  26 + <div>
  27 + Current Route:
  28 + </div>
  29 + <!-- Icons + Status -->
  30 + <div class="row status">
  31 + <!-- Safety Rating -->
  32 + <div class="col-xs-6">
  33 + 80% Safe
  34 + </div>
  35 + <!-- Travel Duration -->
  36 + <div class="col-xs-6">
  37 + 10 Mins
  38 + </div>
  39 + </div>
  40 + </div>
  41 + <!-- Alt Routes -->
  42 + <div class="col-xs-6">
  43 + <button type="button" class="btn btn-default btn-block" id="alt-routes" onclick="todo()">Alternate Routes</button>
  44 + </div>
  45 + </div>
  46 + </div>
  47 +
  48 + <!-- Google Maps -->
  49 + <div class="container" id="map">
  50 + <!-- Placeholder -->
  51 + <img class="img-responsive" src="images/temp.png" alt="temp" width="800" height="600">
  52 + </div>
  53 +
  54 + <!-- Buttons at the bottom of the map -->
  55 + <div class="container">
  56 + <div class="row">
  57 + <!-- Status -->
  58 + <div class="col-xs-4">
  59 + <!-- Title: Current Area -->
  60 + <div>
  61 + Current Area:
  62 + </div>
  63 + <!-- Icons + Status -->
  64 + <div>
  65 + 80% Safe
  66 + </div>
  67 + </div>
  68 + <!-- Emergency -->
  69 + <div class="col-xs-4">
  70 + <button type="button" class="btn btn-danger btn-block" onclick="todo()">Emergency</button>
  71 + </div>
  72 + <!-- Open Map -->
  73 + <div class="col-xs-4">
  74 + <button type="button" class="btn btn-default btn-block" onclick="todo()">Open in Map</button>
  75 + </div>
  76 + </div>
  77 + </div>
  78 +
  79 + </div>
  80 +
  81 +
  82 + <script>
  83 + function todo() {
  84 + alert("This button is brought to you by the wonderful Wizard of Oz.");
  85 + }
  86 + </script>
  87 +
  88 + </body>
  89 +</html>
views/partials/header.ejs View file @ e95e3f8
  1 + <meta charset="utf-8">
  2 + <!-- Ensure that Bootstrap is mobile friendly -->
  3 + <meta name="viewport" content="width=device-width, initial-scale=1">
  4 + <!-- Latest compiled and minified CSS -->
  5 + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  6 +
  7 + <!-- Optional theme -->
  8 + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
  9 +
  10 + <!-- JQuery
  11 + <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> -->
  12 +
  13 + <!-- Latest compiled and minified JavaScript -->
  14 + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
  15 +
  16 + <link rel="stylesheet" type="text/css" href="stylesheets/main.css">
views/partials/nav.ejs View file @ e95e3f8
  1 +<nav class="navbar navbar-default navbar-static-top navbar-inverse">
  2 + <div class="container">
  3 + <ul class="nav navbar-nav">
  4 + <li class="active">
  5 + <a href="/"><span class="glyphicon glyphicon-home"></span> Home</a>
  6 + </li>
  7 + <li>
  8 + <a href="https://devcenter.heroku.com/articles/how-heroku-works"><span class="glyphicon glyphicon-user"></span> How Heroku Works</a>
  9 + </li>
  10 + <li class="dropdown">
  11 + <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="glyphicon glyphicon-info-sign"></span> Getting Started Guides <span class="caret"></span></a>
  12 + <ul class="dropdown-menu" role="menu">
  13 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-ruby">Getting Started with Ruby on Heroku</a></li>
  14 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-nodejs">Getting Started with Node on Heroku</a></li>
  15 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-php">Getting Started with PHP on Heroku</a></li>
  16 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-python">Getting Started with Python on Heroku</a></li>
  17 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-java">Getting Started with Java on Heroku</a></li>
  18 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-go">Getting Started with Go on Heroku</a></li>
  19 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-clojure">Getting Started with Clojure on Heroku</a></li>
  20 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-scala">Getting Started with Scala on Heroku</a></li>
  21 + <li class="divider"></li>
  22 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-heroku-and-connect-without-local-dev">Getting Started on Heroku with Heroku Connect</a></li>
  23 + <li><a href="https://devcenter.heroku.com/articles/getting-started-with-jruby">Getting Started with Ruby on Heroku (Microsoft Windows)</a></li>
  24 + </ul>
  25 + </li>
  26 + </ul>
  27 + <ul class="nav navbar-nav navbar-right">
  28 + <li class="navbar-right">
  29 + <a href="https://devcenter.heroku.com"><span class="glyphicon glyphicon-book"></span> Heroku Dev Center</a>
  30 + </li>
  31 + </ul>
  32 + </div>
  33 +</nav>