SlideShare a Scribd company logo
1 of 33
Download to read offline
Copyright © 2016 M/Gateway Developments Ltd
EWD 3 Training Course
Part 5 (b)
Building a QEWD Application
First Steps
(Using Linux or Raspberry Pi)
Rob Tweed
Director, M/Gateway Developments Ltd
Twitter: @rtweed
Copyright © 2016 M/Gateway Developments Ltd
Pre-requisites
• Node.js installed
• Database & Node.js interface installed and
running:
– Caché & cache.node
– GT.M & NodeM
– Redis & ewd-redis-globals
• QEWD installed and running
• At least a basic text editor available
• These steps are covered in Part 4 of this course
Copyright © 2016 M/Gateway Developments Ltd
Assumptions in this tutorial
• Linux & Caché, GT.M or Redis
• QEWD installed in ~/qewd
– eg /home/ubuntu/qewd
• Default HTTP configuration for Express
– ie not SSL / HTTPS
• ewd-xpress port = 8080
• IP address of QEWD machine:
– 192.168.1.100
• Change paths etc accordingly for your set-up
Copyright © 2016 M/Gateway Developments Ltd
Let’s Get Started…
Copyright © 2016 M/Gateway Developments Ltd
Create new application
• Create new directory:
– ~/qewd/www/demo1
• Create index.html file
– ~/qewd/www/demo1/index.html
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
This is a demo!
</body>
</html>
Copyright © 2016 M/Gateway Developments Ltd
Try loading in browser
• http://192.168.1.100:8080/demo1/index.html
• Should display:
• If so, QEWD successfully fetched your
index.html file from ~/qewd/demo1/index.html
– How did it know to do that?
This is a demo!
Copyright © 2016 M/Gateway Developments Ltd
Web Server Root Path
• Look in:
– ~/qewd/node_modules/qewd/lib/master.js
• Around line 95:
var config = {
managementPassword: params.managementPassword || 'keepThisSecret',
serverName: params.serverName || 'ewd-xpress',
port: params.port || 8080,
poolSize: params.poolSize || 1,
webServerRootPath: params.webServerRootPath || process.cwd() + '/www/',
no_sockets: params.no_sockets || false,
qxBuild: qx.build,
ssl: params.ssl || false,
cors: params.cors || false,
masterProcessPid: process.pid,
database: params.database,
errorLogFile: params.errorLogFile || false,
mode: params.mode || 'production',
…etc
cwd = Current Working Directory
ie where you started QEWD
Copyright © 2016 M/Gateway Developments Ltd
Web Server Root Path
• Look in:
– ~/qewd/node_modules/qewd/lib/master.js
• Around line 95:
var config = {
managementPassword: params.managementPassword || 'keepThisSecret',
serverName: params.serverName || 'ewd-xpress',
port: params.port || 8080,
poolSize: params.poolSize || 1,
webServerRootPath: params.webServerRootPath || process.cwd() + '/www/',
no_sockets: params.no_sockets || false,
qxBuild: qx.build,
masterProcessPid: process.pid,
database: params.database,
errorLogFile: params.errorLogFile || false,
mode: params.mode || 'production',
bodyParser: params.bodyParser || false
};
So in our case,
http://192.168.1.100:8080/
maps to C:qewd/www/
Copyright © 2016 M/Gateway Developments Ltd
QEWD URL mapping
http://192.168.1.100:8080/{applicationName}/{pageName}
maps to
~/qewd/www/{applicationName}/{pageName}
So:
http://192.168.1.100:8080/demo1/index.html
maps to
~/qewd/www/demo1/index.html
Copyright © 2016 M/Gateway Developments Ltd
Detect that the page is ready
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Copyright © 2016 M/Gateway Developments Ltd
Detect that the page is ready
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Load jQuery from CDN site
Could use local installation
Copyright © 2016 M/Gateway Developments Ltd
Detect that the page is ready
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
jQuery function detects that
Page DOM is ready
All JavaScript, CSS loaded
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload the URL in the browser
– Click Reload button
• To see output from console.log:
– In Chrome, open menu
• Developer Tools
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload the URL in the browser
– Click Reload button
– In JavaScript console, you’ll now see:
Copyright © 2016 M/Gateway Developments Ltd
Make the page dynamic
• Communicate with QEWD back-end
• To do this, need to use another EWD 3
module:
– ewd-client
• Client-side JavaScript file / module
• Provides the secure APIs to communicate between
a browser or React Native mobile device and the
ewd-xpess back-end
Copyright © 2016 M/Gateway Developments Ltd
Make the page dynamic
• Install ewd-client:
– Open Command Prompt Window
• Then copy the file:
– ~/qewd/node_modules/ewd-client/lib/proto/ewd-client.js
• to:
– ~/qewd/www/ewd-client.js
cd ~/qewd
npm install ewd-client
Copyright © 2016 M/Gateway Developments Ltd
Loading ewd-client
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Loads it from ~/qewd/www/ewd-client.js
Copyright © 2016 M/Gateway Developments Ltd
Check that it loads
• Reload index.html in browser
• Click the Sources tab in the Developer
Tools window
Successfully loaded
Copyright © 2016 M/Gateway Developments Ltd
Using WebSockets
• In this demo we’ll use WebSockets as the
means of communication between
browser and the QEWD back-end
• We could use Ajax instead
– WebSockets are faster and more flexible
– Ajax may be more scalable at high-end
• ewd-client normalises the two transports
so it’s easy to switch between the two
Copyright © 2016 M/Gateway Developments Ltd
Using WebSockets
• QEWD relies on a standard module
named socket.io to provide WebSocket
support
• You must therefore load socket.io client-
side JavaScript library into the browser
Copyright © 2016 M/Gateway Developments Ltd
Loading socket.io
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
});
</script>
This is a demo!
</body>
</html>
Loads it from a virtual directory
created by socket.io at back-end
Copyright © 2016 M/Gateway Developments Ltd
Check that it loads
• Reload index.html in browser
• Click the Sources tab in the Developer
Tools window
Successfully loaded
Copyright © 2016 M/Gateway Developments Ltd
Ready to communicate with QEWD
• Everything is now in place to use QEWD
and ewd-client
Copyright © 2016 M/Gateway Developments Ltd
Starting ewd-client
• EWD.start() function
– Creates the client environment
• Everything protected within a closure
– Establishes a web socket connection to the QEWD
back-end
– Registers the client application with QEWD
• Will examine this step in more detail later
• Must not be invoked until everything has
been loaded into the browser’s DOM
Copyright © 2016 M/Gateway Developments Ltd
Starting ewd-client
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
console.log('everything loaded!’);
EWD.start('demo1', $, io);
});
</script>
This is a demo!
</body>
</html>
Safe to start within $(document).ready() function
‘demo1’ is our application name
$ is jQuery object
io is socket.io object
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload index.html in browser
EWD has started successfully and
registered the application on QEWD
Copyright © 2016 M/Gateway Developments Ltd
Ensuring that EWD is safe to use
• EWD.start() takes time to complete and
involves several round-trips between client
and back-end
• How do we know when it’s completed and
safe for us to begin communicating
between client and back-end?
Copyright © 2016 M/Gateway Developments Ltd
ewd-registered Event
• When EWD.start() completes, it emits an
event:
– ewd-registered
• This can be used to safely commence
user functionality of application
Copyright © 2016 M/Gateway Developments Ltd
Handling the ewd-registered event
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script>
$(document).ready(function() {
EWD.on('ewd-registered', function() {
// OK the app is now ready for use
console.log('*** application registered and ready for us to start!!');
});
console.log('everything loaded!’);
EWD.start('demo1', $, io);
});
</script>
This is a demo!
</body>
</html>
Copyright © 2016 M/Gateway Developments Ltd
Try it out
• Reload index.html in browser
Copyright © 2016 M/Gateway Developments Ltd
Tidy up the page
• Bad practice to have in-line JavaScript
within HTML pages
– Move to a separate JavaScript file
• ~/qewd/www/demo1/app.js
Copyright © 2016 M/Gateway Developments Ltd
Revised application files
<html>
<head>
<title>Demo QEWD application</title>
</head>
<body>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/ewd-client.js"></script>
<script src=”app.js"></script>
<div id=”content”>
Content goes here
</div>
</body>
</html>
$(document).ready(function() {
EWD.on('ewd-registered', function() {
// EWD app code goes here
});
EWD.start('demo1', $, io);
});
index.html
app.js
Copyright © 2016 M/Gateway Developments Ltd
Now we’re ready to begin
• Use these index.html and app.js files as
templates for other applications
– Creates the basic environment needed for all
your hand-crafted QEWD applications

More Related Content

What's hot

What's hot (20)

EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
 
EWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD ServicesEWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD Services
 
EWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD ApplicationsEWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD Applications
 
EWD 3 Training Course Part 7: Applying the QEWD Messaging Pattern
EWD 3 Training Course Part 7: Applying the QEWD Messaging PatternEWD 3 Training Course Part 7: Applying the QEWD Messaging Pattern
EWD 3 Training Course Part 7: Applying the QEWD Messaging Pattern
 
EWD 3 Training Course Part 12: QEWD Session Timeout Control
EWD 3 Training Course Part 12: QEWD Session Timeout ControlEWD 3 Training Course Part 12: QEWD Session Timeout Control
EWD 3 Training Course Part 12: QEWD Session Timeout Control
 
EWD 3 Training Course Part 14: Using Ajax for QEWD Messages
EWD 3 Training Course Part 14: Using Ajax for QEWD MessagesEWD 3 Training Course Part 14: Using Ajax for QEWD Messages
EWD 3 Training Course Part 14: Using Ajax for QEWD Messages
 
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.jsEWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
 
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
 
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWDEWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
 
EWD 3 Training Course Part 4: Installing & Configuring QEWD
EWD 3 Training Course Part 4: Installing & Configuring QEWDEWD 3 Training Course Part 4: Installing & Configuring QEWD
EWD 3 Training Course Part 4: Installing & Configuring QEWD
 
EWD 3 Training Course Part 2: EWD 3 Overview
EWD 3 Training Course Part 2: EWD 3 OverviewEWD 3 Training Course Part 2: EWD 3 Overview
EWD 3 Training Course Part 2: EWD 3 Overview
 
EWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD SessionEWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD Session
 
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
 
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST ServicesEWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
 
EWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a ServiceEWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a Service
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
 
EWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient ModeEWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient Mode
 
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService FunctionalityEWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
 
QEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServicesQEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServices
 
EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...
EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...
EWD 3 Training Course Part 1: How Node.js Integrates With Global Storage Data...
 

Viewers also liked

Viewers also liked (14)

EWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
EWD 3 Training Course Part 6: What Happens when a QEWD Application is StartedEWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
EWD 3 Training Course Part 6: What Happens when a QEWD Application is Started
 
EWD 3 Training Course Part 3: Summary of EWD 3 Modules
EWD 3 Training Course Part 3: Summary of EWD 3 ModulesEWD 3 Training Course Part 3: Summary of EWD 3 Modules
EWD 3 Training Course Part 3: Summary of EWD 3 Modules
 
EWD 3 Training Course Part 9: Complex QEWD Messages and Responses
EWD 3 Training Course Part 9: Complex QEWD Messages and ResponsesEWD 3 Training Course Part 9: Complex QEWD Messages and Responses
EWD 3 Training Course Part 9: Complex QEWD Messages and Responses
 
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWDEWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
EWD 3 Training Course Part 15: Using a Framework other than jQuery with QEWD
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode Object
 
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging CycleEWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
EWD 3 Training Course Part 8: Anatomy of the QEWD Messaging Cycle
 
EWD 3 Training Course Part 17: Introduction to Global Storage Databases
EWD 3 Training Course Part 17: Introduction to Global Storage DatabasesEWD 3 Training Course Part 17: Introduction to Global Storage Databases
EWD 3 Training Course Part 17: Introduction to Global Storage Databases
 
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORSEWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
 
EWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session LockingEWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session Locking
 
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global StorageEWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
 
EWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
EWD 3 Training Course Part 24: Traversing a Document's Leaf NodesEWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
EWD 3 Training Course Part 24: Traversing a Document's Leaf Nodes
 
EWD 3 Training Course Part 25: Document Database Capabilities
EWD 3 Training Course Part 25: Document Database CapabilitiesEWD 3 Training Course Part 25: Document Database Capabilities
EWD 3 Training Course Part 25: Document Database Capabilities
 
EWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven IndexingEWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven Indexing
 
EWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript ObjectsEWD 3 Training Course Part 21: Persistent JavaScript Objects
EWD 3 Training Course Part 21: Persistent JavaScript Objects
 

Similar to EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application

Day in a life of a node.js developer
Day in a life of a node.js developerDay in a life of a node.js developer
Day in a life of a node.js developer
Edureka!
 

Similar to EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application (20)

qewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tierqewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tier
 
App development with quasar (pdf)
App development with quasar (pdf)App development with quasar (pdf)
App development with quasar (pdf)
 
Day in a life of a node.js developer
Day in a life of a node.js developerDay in a life of a node.js developer
Day in a life of a node.js developer
 
Day In A Life Of A Node.js Developer
Day In A Life Of A Node.js DeveloperDay In A Life Of A Node.js Developer
Day In A Life Of A Node.js Developer
 
Love at first Vue
Love at first VueLove at first Vue
Love at first Vue
 
WordCamp Montreal 2016 WP-API + React with server rendering
WordCamp Montreal 2016  WP-API + React with server renderingWordCamp Montreal 2016  WP-API + React with server rendering
WordCamp Montreal 2016 WP-API + React with server rendering
 
Running Node.js in Production using Passenger
Running Node.js in Production using PassengerRunning Node.js in Production using Passenger
Running Node.js in Production using Passenger
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
 
Improving WordPress Performance with Xdebug and PHP Profiling
Improving WordPress Performance with Xdebug and PHP ProfilingImproving WordPress Performance with Xdebug and PHP Profiling
Improving WordPress Performance with Xdebug and PHP Profiling
 
Introduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azureIntroduction to node js - From "hello world" to deploying on azure
Introduction to node js - From "hello world" to deploying on azure
 
Node.js to the rescue
Node.js to the rescueNode.js to the rescue
Node.js to the rescue
 
"Hidden difficulties of debugger implementation for .NET WASM apps", Andrii R...
"Hidden difficulties of debugger implementation for .NET WASM apps", Andrii R..."Hidden difficulties of debugger implementation for .NET WASM apps", Andrii R...
"Hidden difficulties of debugger implementation for .NET WASM apps", Andrii R...
 
Zend
ZendZend
Zend
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
 
Improve your Java Environment with Docker
Improve your Java Environment with DockerImprove your Java Environment with Docker
Improve your Java Environment with Docker
 
Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016
 
Kubernetes security
Kubernetes securityKubernetes security
Kubernetes security
 
Node js
Node jsNode js
Node js
 

More from Rob Tweed

More from Rob Tweed (8)

QEWD Update
QEWD UpdateQEWD Update
QEWD Update
 
Data Persistence as a Language Feature
Data Persistence as a Language FeatureData Persistence as a Language Feature
Data Persistence as a Language Feature
 
LNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooLNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It Too
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It Too
 
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Servicesewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
 
EWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker ApplianceEWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker Appliance
 
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPSEWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
 
EWD 3 Training Course Part 23: Traversing a Range using DocumentNode Objects
EWD 3 Training Course Part 23: Traversing a Range using DocumentNode ObjectsEWD 3 Training Course Part 23: Traversing a Range using DocumentNode Objects
EWD 3 Training Course Part 23: Traversing a Range using DocumentNode Objects
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Recently uploaded (20)

The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 

EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application

  • 1. Copyright © 2016 M/Gateway Developments Ltd EWD 3 Training Course Part 5 (b) Building a QEWD Application First Steps (Using Linux or Raspberry Pi) Rob Tweed Director, M/Gateway Developments Ltd Twitter: @rtweed
  • 2. Copyright © 2016 M/Gateway Developments Ltd Pre-requisites • Node.js installed • Database & Node.js interface installed and running: – Caché & cache.node – GT.M & NodeM – Redis & ewd-redis-globals • QEWD installed and running • At least a basic text editor available • These steps are covered in Part 4 of this course
  • 3. Copyright © 2016 M/Gateway Developments Ltd Assumptions in this tutorial • Linux & Caché, GT.M or Redis • QEWD installed in ~/qewd – eg /home/ubuntu/qewd • Default HTTP configuration for Express – ie not SSL / HTTPS • ewd-xpress port = 8080 • IP address of QEWD machine: – 192.168.1.100 • Change paths etc accordingly for your set-up
  • 4. Copyright © 2016 M/Gateway Developments Ltd Let’s Get Started…
  • 5. Copyright © 2016 M/Gateway Developments Ltd Create new application • Create new directory: – ~/qewd/www/demo1 • Create index.html file – ~/qewd/www/demo1/index.html <html> <head> <title>Demo QEWD application</title> </head> <body> This is a demo! </body> </html>
  • 6. Copyright © 2016 M/Gateway Developments Ltd Try loading in browser • http://192.168.1.100:8080/demo1/index.html • Should display: • If so, QEWD successfully fetched your index.html file from ~/qewd/demo1/index.html – How did it know to do that? This is a demo!
  • 7. Copyright © 2016 M/Gateway Developments Ltd Web Server Root Path • Look in: – ~/qewd/node_modules/qewd/lib/master.js • Around line 95: var config = { managementPassword: params.managementPassword || 'keepThisSecret', serverName: params.serverName || 'ewd-xpress', port: params.port || 8080, poolSize: params.poolSize || 1, webServerRootPath: params.webServerRootPath || process.cwd() + '/www/', no_sockets: params.no_sockets || false, qxBuild: qx.build, ssl: params.ssl || false, cors: params.cors || false, masterProcessPid: process.pid, database: params.database, errorLogFile: params.errorLogFile || false, mode: params.mode || 'production', …etc cwd = Current Working Directory ie where you started QEWD
  • 8. Copyright © 2016 M/Gateway Developments Ltd Web Server Root Path • Look in: – ~/qewd/node_modules/qewd/lib/master.js • Around line 95: var config = { managementPassword: params.managementPassword || 'keepThisSecret', serverName: params.serverName || 'ewd-xpress', port: params.port || 8080, poolSize: params.poolSize || 1, webServerRootPath: params.webServerRootPath || process.cwd() + '/www/', no_sockets: params.no_sockets || false, qxBuild: qx.build, masterProcessPid: process.pid, database: params.database, errorLogFile: params.errorLogFile || false, mode: params.mode || 'production', bodyParser: params.bodyParser || false }; So in our case, http://192.168.1.100:8080/ maps to C:qewd/www/
  • 9. Copyright © 2016 M/Gateway Developments Ltd QEWD URL mapping http://192.168.1.100:8080/{applicationName}/{pageName} maps to ~/qewd/www/{applicationName}/{pageName} So: http://192.168.1.100:8080/demo1/index.html maps to ~/qewd/www/demo1/index.html
  • 10. Copyright © 2016 M/Gateway Developments Ltd Detect that the page is ready <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html>
  • 11. Copyright © 2016 M/Gateway Developments Ltd Detect that the page is ready <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> Load jQuery from CDN site Could use local installation
  • 12. Copyright © 2016 M/Gateway Developments Ltd Detect that the page is ready <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> jQuery function detects that Page DOM is ready All JavaScript, CSS loaded
  • 13. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload the URL in the browser – Click Reload button • To see output from console.log: – In Chrome, open menu • Developer Tools
  • 14. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload the URL in the browser – Click Reload button – In JavaScript console, you’ll now see:
  • 15. Copyright © 2016 M/Gateway Developments Ltd Make the page dynamic • Communicate with QEWD back-end • To do this, need to use another EWD 3 module: – ewd-client • Client-side JavaScript file / module • Provides the secure APIs to communicate between a browser or React Native mobile device and the ewd-xpess back-end
  • 16. Copyright © 2016 M/Gateway Developments Ltd Make the page dynamic • Install ewd-client: – Open Command Prompt Window • Then copy the file: – ~/qewd/node_modules/ewd-client/lib/proto/ewd-client.js • to: – ~/qewd/www/ewd-client.js cd ~/qewd npm install ewd-client
  • 17. Copyright © 2016 M/Gateway Developments Ltd Loading ewd-client <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> Loads it from ~/qewd/www/ewd-client.js
  • 18. Copyright © 2016 M/Gateway Developments Ltd Check that it loads • Reload index.html in browser • Click the Sources tab in the Developer Tools window Successfully loaded
  • 19. Copyright © 2016 M/Gateway Developments Ltd Using WebSockets • In this demo we’ll use WebSockets as the means of communication between browser and the QEWD back-end • We could use Ajax instead – WebSockets are faster and more flexible – Ajax may be more scalable at high-end • ewd-client normalises the two transports so it’s easy to switch between the two
  • 20. Copyright © 2016 M/Gateway Developments Ltd Using WebSockets • QEWD relies on a standard module named socket.io to provide WebSocket support • You must therefore load socket.io client- side JavaScript library into the browser
  • 21. Copyright © 2016 M/Gateway Developments Ltd Loading socket.io <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); }); </script> This is a demo! </body> </html> Loads it from a virtual directory created by socket.io at back-end
  • 22. Copyright © 2016 M/Gateway Developments Ltd Check that it loads • Reload index.html in browser • Click the Sources tab in the Developer Tools window Successfully loaded
  • 23. Copyright © 2016 M/Gateway Developments Ltd Ready to communicate with QEWD • Everything is now in place to use QEWD and ewd-client
  • 24. Copyright © 2016 M/Gateway Developments Ltd Starting ewd-client • EWD.start() function – Creates the client environment • Everything protected within a closure – Establishes a web socket connection to the QEWD back-end – Registers the client application with QEWD • Will examine this step in more detail later • Must not be invoked until everything has been loaded into the browser’s DOM
  • 25. Copyright © 2016 M/Gateway Developments Ltd Starting ewd-client <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { console.log('everything loaded!’); EWD.start('demo1', $, io); }); </script> This is a demo! </body> </html> Safe to start within $(document).ready() function ‘demo1’ is our application name $ is jQuery object io is socket.io object
  • 26. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload index.html in browser EWD has started successfully and registered the application on QEWD
  • 27. Copyright © 2016 M/Gateway Developments Ltd Ensuring that EWD is safe to use • EWD.start() takes time to complete and involves several round-trips between client and back-end • How do we know when it’s completed and safe for us to begin communicating between client and back-end?
  • 28. Copyright © 2016 M/Gateway Developments Ltd ewd-registered Event • When EWD.start() completes, it emits an event: – ewd-registered • This can be used to safely commence user functionality of application
  • 29. Copyright © 2016 M/Gateway Developments Ltd Handling the ewd-registered event <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script> $(document).ready(function() { EWD.on('ewd-registered', function() { // OK the app is now ready for use console.log('*** application registered and ready for us to start!!'); }); console.log('everything loaded!’); EWD.start('demo1', $, io); }); </script> This is a demo! </body> </html>
  • 30. Copyright © 2016 M/Gateway Developments Ltd Try it out • Reload index.html in browser
  • 31. Copyright © 2016 M/Gateway Developments Ltd Tidy up the page • Bad practice to have in-line JavaScript within HTML pages – Move to a separate JavaScript file • ~/qewd/www/demo1/app.js
  • 32. Copyright © 2016 M/Gateway Developments Ltd Revised application files <html> <head> <title>Demo QEWD application</title> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="/ewd-client.js"></script> <script src=”app.js"></script> <div id=”content”> Content goes here </div> </body> </html> $(document).ready(function() { EWD.on('ewd-registered', function() { // EWD app code goes here }); EWD.start('demo1', $, io); }); index.html app.js
  • 33. Copyright © 2016 M/Gateway Developments Ltd Now we’re ready to begin • Use these index.html and app.js files as templates for other applications – Creates the basic environment needed for all your hand-crafted QEWD applications