Web Application with ExpressJS
By Satit Rianpit <rianpit@gmail.com>

Installation
$ npm init
$ npm install express --save
$ npm install express-generator -gGenerator
$ npm install nodemon -gMonitoring tool
Create new project
$ express myapp
create : myapp
create : myapp/package.json
create : myapp/app.js
create : myapp/public
create : myapp/public/javascripts
create : myapp/public/images
create : myapp/routes
create : myapp/routes/index.js
create : myapp/routes/users.js
create : myapp/public/stylesheets
create : myapp/public/stylesheets/style.css
create : myapp/views
create : myapp/views/index.jade
create : myapp/views/layout.jade
create : myapp/views/error.jade
create : myapp/bin
create : myapp/bin/wwwRunning App
$ cd myapp
$ npm install
$ node .\bin\www

Debug
Result
// with monitoring
$ cd myapp
$ npm install
$ nodemon .\bin\wwwApplication structure

Basic routing
// routes/index.js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
// app.js
var routes = require('./routes/index');Routing Example
// respond with "Hello World!" on the homepage
app.get('/', function (req, res) {
res.send('Hello World!');
});
// accept POST request on the homepage
app.post('/', function (req, res) {
res.send('Got a POST request');
});
// accept PUT request at /user
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user');
});
// accept DELETE request at /user
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user');
});Get parameters
Routing: /users/:id
Get parameter: req.params.id
Routing: /users?id=100
Get paraeter: req.query.id
Routing: via JSON {id: 100, name: 'Satit'}
Get parameters: req.body.id, req.body.namehttp://expressjs.com/api.html#app.param
http://expressjs.com/api.html#req.query
http://expressjs.com/api.html#req.body
Static file
// Default Express static file
app.use(express.static(path.join(__dirname, 'public')));
// Custom
app.use(express.static('public'));
app.use(express.static('files'));
// Static folder with url.
app.use('/static', express.static('public'));
http://localhost:3000/static/images/kitten.jpg
http://localhost:3000/static/css/style.css
http://localhost:3000/static/js/app.js
http://localhost:3000/static/images/bg.png
http://localhost:3000/static/hello.htmlResult
Middleware
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});Result

Middleware example
// app.js
var auth = function (req, res, next) {
if (req.session.username) {
next();
} else {
res.redirect('/login');
}
};// routers/index.js
app.get('/admin', auth, function (req, res) {
res.render('views/admin');
});Template engine
// app.js
// set view path
app.set('views', './views')
// set view engine
app.set('view engine', 'jade');//- views/index.jade
html
head
title!= title
body
h1!= message// routes/index.js
router.get('/', function (req, res) {
res.render('index', { title: 'Hey', message: 'Hello there!'});
});Datebase integration
// Install mysql module
$ npm install mysql// routes/index.js
router.get('/', function (req, res) {
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'dbuser',
password : 's3kreee7'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
connection.end();
});Session
// Install module
$ npm install express-session --save// app.js
app.use(session({
secret: 'MySeCrETkEy',
resave: false,
saveUninitialized: true,
secure: true
}));// routes/index.js
router.get('/users', function (req, res) {
if (req.session.username) {
res.send('Welcome, ' + req.session.username);
} else {
res.redirect('/login');
}
});
// set session
router.get('/dologin', function (req, res) {
req.session.username = 'Satit';
req.session.userType = 1;
});Destroy Session
// Remove sessioin
app.get('/logout', function (req, res) {
req.session.destroy(function(err) {
res.redirect('/login');
});
});Upload file
$ npm install multer// app.js
var multer = require('muster');
app.use(multer({ dest: './uploads/'}));// views/upload.jade
form(enctype="multipart/form-data", action="/upload", method="post")
input(type="file", name="userFile")
input(type="submit", value="Upload File" name="submit")// routes/index.js
router.post('/upload', function (req, res) {
console.log(req.files);
res.send({file: req.files});
});
Modules
// models/Users.js
exports.doLogin = function (db, username, password) {
var q = Q.defer();
db('sys_member')
.select('*')
.where('username', username)
.where('password', md5(password))
.where('status', 'yes')
.exec(function (err, rows) {
if (err) q.reject(err);
else q.resolve(rows);
});
return q.promise;
};// controllers/Users.js
var Users = require('../models/Users');
exports.login = function (req, res) {
var username = req.body.username;
var password = req.body.password;
Users.doLogin(req.db, username, password)
.then(function (rows) {
res.send({ok: true, users: rows});
});
};// routes/index.js
var Users = require('../controllers/Users');
router.post('/login', Users.login);
router.get('/users/add', function (req, res) {
res.render('users/add');
};Login System

extends ../login
block scripts
script(src="/javascripts/LoginController.js")
script(src="/javascripts/LoginService.js")
block content
div(flex-container="column", flex-align="space-between center", ng-controller="LoginController")
form(name="frmLogin")
div(flex-item="6", style="width: 300px;")
.fs-title.display-block
i.mdi.mdi-account-key.icon.icon--l.icon--red.icon--circled
| เข้าสู่ระบบ (Login system)
lx-text-field(label="Username")
input(type="text", ng-model="username")
lx-text-field(label="Password")
input(type="password", ng-model="password")
button(ng-click="doLogin()").btn.btn--l.btn--green.btn--raised เข้าสู่ระบบURL: /login
Method: GET
File: views/users/login.jade [Express]
Click login button
// File: public/javascripts/LoginController.js [AngularJS]
// เมื่อคลิกปุ่มล๊อกอิน จะเรียกใช้งานฟังก์ชัน doLogin()
$scope.doLogin = function () {
LoginService.doLogin($scope.username, $scope.password)
.then(function (data) {
if (data.ok) {
$window.location.href = '/';
} else {
LxNotificationService.error('ชื่อผู้ใช้งาน/รหัสผ่าน ไม่ถูกต้อง');
}
}, function (err) {
LxNotificationService.error('Oop!');
console.log(err);
});
};
// File: public/javascripts/LoginService.js [AngularJS]
doLogin: function (username, password) {
var q = $q.defer();
$http({
url: '/login/dologin',
method: 'POST',
data: { username: username, password: password }
})
.success(function (data) {
q.resolve(data);
})
.error(function (data, status) {
q.reject(status);
});
return q.promise;
}Web Application with ExpressJS
By Satit Rianpit
Web Application with ExpressJS
- 767