© 2015 PayPal Inc. All rights reserved. Confidential and proprietary.
Express.js labs
Aeshan Wijetunge
06/ 3 / 2015 SST
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary.
Why a Web Framework?
A framework provides the scaffolding for web developers aiming to build an
application in an organized manner.
Express is one of the most popular node.js frameworks and you might find it
handy in your hackathon for the following reasons:
● Lightweight
● Routing support
● Well documented
● Many modular features available (e.g: express-session)
● Very active user community with a great deal of online material
2
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 3
Middleware
A function with access to the request object, the response object, and the next
middleware in line in the request-response cycle of an application.
Middleware
Middleware
Applicatio
n
Request Response
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 4
Views: adding a templating engine
Why a templating engine? Static HTML is very restrictive and as we’re
creating a web application we’ll need something more dynamic.
Template engines compile template written in one markup to HTML which is
rendered on the user’s browser.
There are many templating engine options that can be added to express.
● HAML
● jade
● dustJS
● handlebars
● …
For the sake of convenience, we’ll be using dust.js views in this example and
will be relying on a module created by PayPal as the template-engine for the
rendering of the page.
Be sure to read-up on their awesome documentation when using dust.js
http://akdubya.github.io/dustjs/#guide
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 5
Views: adding a template engine
var options = {
helpers: [
//NOTE: function has to take dust as an argument.
//The following function defines @myHelper helper
function (dust) { dust.helpers.myHelper = function (a, b, c, d) {} },
'dustjs-helpers' //So do installed modules
]
};
app.engine('dust', adaro.dust(options));
app.set('view engine', 'dust');
app.set('views', __dirname + '/public/views');
npm install adaro --save
<html>
<body>
<div>Hello {name}!</div>
</body>
</html>
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 6
Adding Features : module by module
A web-application that just serves HTML pages may not be all that useful.
Thankfully express is easily extensible thanks to npm.
As discussed earlier the node community has populated a massive variety of
modules on npm to suit almost any requirement you might come up with
during your hackathon.
We’re going to use a weather-api to fetch the latest updates for some cities of
our choice.
With a bit of googling we find a site with some open APIs (not requiring API
secret keys etc) which is great for our example
http://openweathermap.org/current
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 7
Mashups : Using APIs
When developing applications we’d not only want to reuse functionality via
npm modules. We’d also like to access external data which would make our
web apps even more useful.
Many companies & organizations expose their data to developers via APIs.
For our weather app consider this API call to fetch Singapore weather
http://api.openweathermap.org/data/2.5/weather?q=Singapore
You can view the JSON response in your browser.
Not all APIs are open. Other may require client secret keys but a good API
provider would document how to use their API.
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 8
Request: the API client
npm install request --save
Googling for API clients will uncover many though we’ll be using the
request module to consume our weather API.
request('http://api.openweathermap.org/data/2.5/weather?q=Singapore'
, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Weather Data for Singapore
}
})
Hitting your koding.io url should populate the console.log in your koding
terminal.
http://aeshanw.koding.io:6001/weather
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 9
API Debugging
JSON can be a bit difficult to read at times so we rely on some online tools to better
understand the API response.
http://jsonformatter.curiousconcept.com/
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 10
View : Presenting the data
With a better understanding of the API’s data response we can modify our dust template to
render it in a more presentable form to the user.
<html>
<body>
<h1>Weather for {country}</h1>
{#weather}
<ul>
<li>{main}</li>
<li>{description}</li>
</ul>
{/weather}
</body>
</html>
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 11
Try it yourself
The complete code for the lab is in the github repo:
https://github.com/node-workshop-sst/sst-weather-lab
$ cd ~/node
$ git clone https://github.com/node-workshop-sst/sst-weather-lab.git
$ cd sst-weather-lab
$ npm install
$ node app.js
SST blocks certain ports so we’ll need to override our koding ports
Modify this code in app.js to use port 80.
app.listen(appEnv.port80, function() {
$ sudo service apache2 stop
$ sudo node app.js
visit aeshanw.koding.io/weather
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 12
Deploying to Bluemix
You’ll need to git add & commit all your code changes except the node_modules folder.
Then simply git push to your bluemix git repo to deploy the app to staging.
git push origin master
And you should see activity on your bluemix dashboard and once its deployed you can hit your
own url to view the result
http://sst-express-lab.eu-gb.mybluemix.net/weather
© 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 13
Conclusion
● Use frameworks like Express to organize your development
● Add features using node modules via npm
● Extend your web app functionality via external APIs
● use web tools & console.log to better debug and better consume APIs
If you liked ExpressJS, and desire more features we strongly suggest you try
Kraken.js. It originated from PayPal and has more advanced features for more
scalable web apps.
http://krakenjs.com/
Thank you & Happy Hacking!

More Related Content

PPTX
Ite express labs
PPTX
Apigee deploy grunt plugin.1.0
PDF
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
PDF
Beyond AngularJS: Best practices and more
PDF
I Love APIs 2015: Continuous Integration the Virtuous Cycle
PPTX
Building Creative Product Extensions with Experience Manager
PDF
Bootiful Development with Spring Boot and Angular - RWX 2018
PDF
Быстрый старт в gDrive API
Ite express labs
Apigee deploy grunt plugin.1.0
Selenium Page Object Model Using Page Factory | Selenium Tutorial For Beginne...
Beyond AngularJS: Best practices and more
I Love APIs 2015: Continuous Integration the Virtuous Cycle
Building Creative Product Extensions with Experience Manager
Bootiful Development with Spring Boot and Angular - RWX 2018
Быстрый старт в gDrive API

What's hot (20)

PDF
Angular Dependency Injection
PDF
Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
PPTX
Modern web app with REACT
PDF
Angular coding: from project management to web and mobile deploy
PDF
Microservices for the Masses with Spring Boot and JHipster - RWX 2018
PDF
Bootiful Development with Spring Boot and Vue - RWX 2018
DOCX
Angular2RoutingSetupByShubham
PDF
SocketIOSetupWithAngularJSAppByShubham
PDF
React Native - Getting Started
PDF
Corley cloud angular in cloud
PDF
Learn Angular 9/8 In Easy Steps
PPTX
Angular Ivy- An Overview
PPTX
Angular elements - embed your angular components EVERYWHERE
PDF
Quick Way to work with Models and Alloy in Appcelerator Titanium
PDF
Modern Web Applications with Sightly
PDF
Webpack and angularjs
PDF
Introduction to angular 4
PPTX
PDF
React native.key
PPTX
AEM and Sling
Angular Dependency Injection
Bootiful Development with Spring Boot and Angular - Connect.Tech 2017
Modern web app with REACT
Angular coding: from project management to web and mobile deploy
Microservices for the Masses with Spring Boot and JHipster - RWX 2018
Bootiful Development with Spring Boot and Vue - RWX 2018
Angular2RoutingSetupByShubham
SocketIOSetupWithAngularJSAppByShubham
React Native - Getting Started
Corley cloud angular in cloud
Learn Angular 9/8 In Easy Steps
Angular Ivy- An Overview
Angular elements - embed your angular components EVERYWHERE
Quick Way to work with Models and Alloy in Appcelerator Titanium
Modern Web Applications with Sightly
Webpack and angularjs
Introduction to angular 4
React native.key
AEM and Sling

Similar to Sst hackathon express (20)

PPTX
Node.js primer for ITE students
PPTX
SAP Kapsel Plugins For Cordova
PPTX
API Services: Building State-of-the-Art APIs
PDF
Node.js Workshop
PPTX
Kraken.js Lab Primer
PDF
AWS Container Services – 유재석 (AWS 솔루션즈 아키텍트)
PDF
Amazon Container Services – 유재석 (AWS 솔루션즈 아키텍트)
PDF
Node.js Tools Ecosystem
PPTX
Reactive application using meteor
PPTX
Build single page applications using AngularJS on AEM
PDF
Build single page applications using AngularJS on AEM
PPTX
Build single page applications using AngularJS on AEM
PDF
AWS 고객사를 위한 ‘AWS 컨테이너 교육’ - 유재석, AWS 솔루션즈 아키텍트
PPTX
Building and managing applications fast for IBM i
PPTX
AEM and Sling
PPTX
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
PDF
Rhomobile 5.5 Release Notes
DOCX
PPTX
Appium solution
PPTX
Mean stack Magics
Node.js primer for ITE students
SAP Kapsel Plugins For Cordova
API Services: Building State-of-the-Art APIs
Node.js Workshop
Kraken.js Lab Primer
AWS Container Services – 유재석 (AWS 솔루션즈 아키텍트)
Amazon Container Services – 유재석 (AWS 솔루션즈 아키텍트)
Node.js Tools Ecosystem
Reactive application using meteor
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
AWS 고객사를 위한 ‘AWS 컨테이너 교육’ - 유재석, AWS 솔루션즈 아키텍트
Building and managing applications fast for IBM i
AEM and Sling
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
Rhomobile 5.5 Release Notes
Appium solution
Mean stack Magics

Recently uploaded (20)

PDF
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PPTX
Build Your First AI Agent with UiPath.pptx
PDF
NewMind AI Weekly Chronicles – August ’25 Week IV
PDF
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
PDF
Flame analysis and combustion estimation using large language and vision assi...
PDF
Comparative analysis of machine learning models for fake news detection in so...
PDF
Consumable AI The What, Why & How for Small Teams.pdf
PDF
UiPath Agentic Automation session 1: RPA to Agents
PDF
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
PDF
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
PPT
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
PDF
sbt 2.0: go big (Scala Days 2025 edition)
PPTX
Microsoft Excel 365/2024 Beginner's training
PDF
Convolutional neural network based encoder-decoder for efficient real-time ob...
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PDF
giants, standing on the shoulders of - by Daniel Stenberg
PDF
Taming the Chaos: How to Turn Unstructured Data into Decisions
PDF
Dell Pro Micro: Speed customer interactions, patient processing, and learning...
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
NewMind AI Weekly Chronicles – August ’25 Week III
Build Your First AI Agent with UiPath.pptx
NewMind AI Weekly Chronicles – August ’25 Week IV
Transform-Your-Streaming-Platform-with-AI-Driven-Quality-Engineering.pdf
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
Flame analysis and combustion estimation using large language and vision assi...
Comparative analysis of machine learning models for fake news detection in so...
Consumable AI The What, Why & How for Small Teams.pdf
UiPath Agentic Automation session 1: RPA to Agents
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
5-Ways-AI-is-Revolutionizing-Telecom-Quality-Engineering.pdf
Galois Field Theory of Risk: A Perspective, Protocol, and Mathematical Backgr...
sbt 2.0: go big (Scala Days 2025 edition)
Microsoft Excel 365/2024 Beginner's training
Convolutional neural network based encoder-decoder for efficient real-time ob...
sustainability-14-14877-v2.pddhzftheheeeee
giants, standing on the shoulders of - by Daniel Stenberg
Taming the Chaos: How to Turn Unstructured Data into Decisions
Dell Pro Micro: Speed customer interactions, patient processing, and learning...

Sst hackathon express

  • 1. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. Express.js labs Aeshan Wijetunge 06/ 3 / 2015 SST
  • 2. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. Why a Web Framework? A framework provides the scaffolding for web developers aiming to build an application in an organized manner. Express is one of the most popular node.js frameworks and you might find it handy in your hackathon for the following reasons: ● Lightweight ● Routing support ● Well documented ● Many modular features available (e.g: express-session) ● Very active user community with a great deal of online material 2
  • 3. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 3 Middleware A function with access to the request object, the response object, and the next middleware in line in the request-response cycle of an application. Middleware Middleware Applicatio n Request Response
  • 4. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 4 Views: adding a templating engine Why a templating engine? Static HTML is very restrictive and as we’re creating a web application we’ll need something more dynamic. Template engines compile template written in one markup to HTML which is rendered on the user’s browser. There are many templating engine options that can be added to express. ● HAML ● jade ● dustJS ● handlebars ● … For the sake of convenience, we’ll be using dust.js views in this example and will be relying on a module created by PayPal as the template-engine for the rendering of the page. Be sure to read-up on their awesome documentation when using dust.js http://akdubya.github.io/dustjs/#guide
  • 5. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 5 Views: adding a template engine var options = { helpers: [ //NOTE: function has to take dust as an argument. //The following function defines @myHelper helper function (dust) { dust.helpers.myHelper = function (a, b, c, d) {} }, 'dustjs-helpers' //So do installed modules ] }; app.engine('dust', adaro.dust(options)); app.set('view engine', 'dust'); app.set('views', __dirname + '/public/views'); npm install adaro --save <html> <body> <div>Hello {name}!</div> </body> </html>
  • 6. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 6 Adding Features : module by module A web-application that just serves HTML pages may not be all that useful. Thankfully express is easily extensible thanks to npm. As discussed earlier the node community has populated a massive variety of modules on npm to suit almost any requirement you might come up with during your hackathon. We’re going to use a weather-api to fetch the latest updates for some cities of our choice. With a bit of googling we find a site with some open APIs (not requiring API secret keys etc) which is great for our example http://openweathermap.org/current
  • 7. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 7 Mashups : Using APIs When developing applications we’d not only want to reuse functionality via npm modules. We’d also like to access external data which would make our web apps even more useful. Many companies & organizations expose their data to developers via APIs. For our weather app consider this API call to fetch Singapore weather http://api.openweathermap.org/data/2.5/weather?q=Singapore You can view the JSON response in your browser. Not all APIs are open. Other may require client secret keys but a good API provider would document how to use their API.
  • 8. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 8 Request: the API client npm install request --save Googling for API clients will uncover many though we’ll be using the request module to consume our weather API. request('http://api.openweathermap.org/data/2.5/weather?q=Singapore' , function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Weather Data for Singapore } }) Hitting your koding.io url should populate the console.log in your koding terminal. http://aeshanw.koding.io:6001/weather
  • 9. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 9 API Debugging JSON can be a bit difficult to read at times so we rely on some online tools to better understand the API response. http://jsonformatter.curiousconcept.com/
  • 10. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 10 View : Presenting the data With a better understanding of the API’s data response we can modify our dust template to render it in a more presentable form to the user. <html> <body> <h1>Weather for {country}</h1> {#weather} <ul> <li>{main}</li> <li>{description}</li> </ul> {/weather} </body> </html>
  • 11. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 11 Try it yourself The complete code for the lab is in the github repo: https://github.com/node-workshop-sst/sst-weather-lab $ cd ~/node $ git clone https://github.com/node-workshop-sst/sst-weather-lab.git $ cd sst-weather-lab $ npm install $ node app.js SST blocks certain ports so we’ll need to override our koding ports Modify this code in app.js to use port 80. app.listen(appEnv.port80, function() { $ sudo service apache2 stop $ sudo node app.js visit aeshanw.koding.io/weather
  • 12. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 12 Deploying to Bluemix You’ll need to git add & commit all your code changes except the node_modules folder. Then simply git push to your bluemix git repo to deploy the app to staging. git push origin master And you should see activity on your bluemix dashboard and once its deployed you can hit your own url to view the result http://sst-express-lab.eu-gb.mybluemix.net/weather
  • 13. © 2015 PayPal Inc. All rights reserved. Confidential and proprietary. 13 Conclusion ● Use frameworks like Express to organize your development ● Add features using node modules via npm ● Extend your web app functionality via external APIs ● use web tools & console.log to better debug and better consume APIs If you liked ExpressJS, and desire more features we strongly suggest you try Kraken.js. It originated from PayPal and has more advanced features for more scalable web apps. http://krakenjs.com/ Thank you & Happy Hacking!

Editor's Notes

  • #3: extol the benefits of a simple framework like express