0% found this document useful (0 votes)
73 views

Node JS Routing

The document demonstrates how to set up routing and middleware in Express. It requires Express, creates an app instance, and defines routes for '/about' and '/login' pages. It also includes a default middleware to handle 404 errors. The app listens on port 3000. It then shows an example of using the express.static middleware to serve static files from a directory.

Uploaded by

Syed Ifran Ejaz
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
73 views

Node JS Routing

The document demonstrates how to set up routing and middleware in Express. It requires Express, creates an app instance, and defines routes for '/about' and '/login' pages. It also includes a default middleware to handle 404 errors. The app listens on port 3000. It then shows an example of using the express.static middleware to serve static files from a directory.

Uploaded by

Syed Ifran Ejaz
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 107

Routing

Node JS
Express Routing
var express = require('express');
var app = express();

app.use('/about', (req, res) => {


res.send('This is the about page.');
});

app.use('/login', (req, res) => {


res.send('This is the login page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 2


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 3


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 4


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 5


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 6


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 7


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 8


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 9


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res)


=> {
app.listen(3000, () => {
res.status(404).send('Not
console.log('Listening
found!'); on port 3000');
});
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 10


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res)


=> {
app.listen(3000, () => {
res.status(404).send('Not
console.log('Listening
found!'); on port 3000');
});
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 11


Express Routing
var express = require('express');
varapp = express();

app.use('/about', (req, res) => {


res.send('This is the about
page.');
});

app.use('/login', (req, res) => {


res.send('This is the login
page.');
});

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 12


Express Middleware
• A middleware is a function that is invoked in the
handling of an HTTP request

• It is used in the “middle” between receiving


a request and sending a response

• Multiple middlewares can be chained together


on the same request

Property of Penn Engineering, Chris Murphy SD4x-4.3 13


Middleware: Serving Static Files
• The simplest middleware is express.static,
which serves static files that are locally stored

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 14


Middleware: Serving Static Files
• The simplest middleware is express.static,
which serves static files that are locally stored

var express = require('express');


var app = express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});

app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 15


Middleware: Serving Static Files
• The simplest middleware is express.static,
which serves static files that are locally stored

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 16


Middleware: Serving Static Files
• The simplest middleware is express.static,
which serves static files that are locally stored

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 17


Middleware: Serving Static Files
• The simplest middleware is express.static,
which serves static files that are locally stored

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 18


Middleware: Serving Static Files
• The simplest middleware is express.static,
which serves static files that are locally stored

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3 19


20
<!-- This is files/index.html -->

<html>
<body>
<h1>Hello!</h1>
<img src="images/kitty.jpg">
<!-- File is files/images/kitty.jpg -->
</body>
</html>

Property of Penn Engineering, Chris Murphy SD4x-4.3


21
<!-- This is files/index.html -->

<html>
<body>
<h1>Hello!</h1>
<img src="images/kitty.jpg">
<!-- File is files/images/kitty.jpg -->
</body>
</html>

Property of Penn Engineering, Chris Murphy SD4x-4.3


22
<!-- This is files/index.html -->

<html>
<body>
<h1>Hello!</h1>
<img src="images/kitty.jpg">
<!-- File is files/images/kitty.jpg -->
</body>
</html>

Property of Penn Engineering, Chris Murphy SD4x-4.3


23
<!-- This is files/index.html -->

<html>
<body>
<h1>Hello!</h1>
<img src="images/kitty.jpg">
<!-- File is files/images/kitty.jpg -->
</body>
</html>

Property of Penn Engineering, Chris Murphy SD4x-4.3


24
<!-- This is files/index.html -->

<html>
<body>
<h1>Hello!</h1>
<img src="images/kitty.jpg">
<!-- File is files/images/kitty.jpg -->
</body>
</html>

Property of Penn Engineering, Chris Murphy SD4x-4.3


25
<!-- This is files/index.html -->

<html>
<body>
<h1>Hello!</h1>
<img src="images/kitty.jpg">
<!-- File is files/images/kitty.jpg -->
</body>
</html>

Property of Penn Engineering, Chris Murphy SD4x-4.3


26
<!-- This is files/index.html -->

<html>
<body>
<h1>Hello!</h1>
<img src="images/kitty.jpg">
<!-- File is files/images/kitty.jpg -->
</body>
</html>

Property of Penn Engineering, Chris Murphy SD4x-4.3


27

Middleware: Serving Static Files


• We can use the response object to send
back specific HTML files as needed

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3


28

Middleware: Serving Static Files


• We can use the response object to send
back specific HTML files as needed

var express =
require('express'); varapp =
express();

app.use('/public',
express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3


29

Middleware: Serving Static Files


• We can use the response object to send
back specific HTML files as needed

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).send('Not found!');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3


30

Middleware: Serving Static Files


• We can use the response object to send
back specific HTML files as needed

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3


31

Middleware: Serving Static Files


• We can use the response object to send
back specific HTML files as needed

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3


32

Middleware: Serving Static Files


• We can use the response object to send
back specific HTML files as needed

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3


33

Middleware: Serving Static Files


• We can use the response object to send
back specific HTML files as needed

var express =
require('express'); varapp =
express();

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});

Property of Penn Engineering, Chris Murphy SD4x-4.3


Defining and Using Middleware
• Middleware functions can contain any amount
of JavaScript code with any functionality

• They take three parameters: req, res, and


next

• next() must be called at the end of the function


to invoke the next middleware or the final
response

Property of Penn Engineering, Chris Murphy SD4x-4.3 111


35
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
36
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
37
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received
request for ' + url +
' at '
+
time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


app.listen(3000, () => {
res.status(404).sendFile( dirname +
console.log('Listening on port 3000');
'/404.html');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
38
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for ' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
39
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
40
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
41
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
42
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public', express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname +
'/404.html');
app.listen(3000, () => {
});
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
43
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

app.use(logger);

app.use('/public',
express.static('files'));

app.use( /*default*/ (req, res) =>


{ res.status(404).sendFile( dirname +
app.listen(3000,
'/404.html'); () => {
});console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
44
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

// app.use(logger);

app.use('/public', logger, express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname + '/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
45
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

// app.use(logger);

app.use('/public', logger, express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname + '/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
46
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

// app.use(logger);

app.use('/public', logger, express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname + '/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
47
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

// app.use(logger);

app.use('/public', logger, express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname + '/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
48
var express = require('express');
var app = express();

var logger = (req, res, next) => {


var url = req.url;
var time = new Date();
console.log('Received request for
' + url +
' at ' + time);
next();
};

// app.use(logger);

app.use('/public', logger, express.static('files'));

app.use( /*default*/ (req, res) => {


res.status(404).sendFile( dirname + '/404.html');
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});
Property of Penn Engineering, Chris Murphy SD4x-4.3
Middleware Chaining
• Middleware functions are called in the order
in which they are specified

• Each uses the same Request and


Response objects

• A middleware function can modify the Request so


that it can then be used by subsequent
middleware functions “downstream” in the route

Property of Penn Engineering, Chris Murphy SD4x-4.3 126


var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username =
'Admin'; next();
}

app.use('/welcome',
nameFinder, greeter,
(req
app.use('/admin', adminName,
, greeter,
(req,
res res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); } )
(req,
; res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); }
(req,
); res) => { res.end(); } );
SD4x-4.3 127
var nameFinder = (req, res, next) => {
var name = req.query.name;
if (name) req.username = name.toUpperCase();
else req.username = 'Guest';
next();
}

var greeter = (req, res, next) =>


{ res.status(200).type('html');
res.write('Hello, ' + req.username);
next();
}

var adminName = (req, res, next) => {


req.username = 'Admin';
next();
}

app.use('/welcome', nameFinder,
greeter,
(req, res) =>
app.use('/admin', adminName, greeter,
{ res.end(); } )
(req,
; res) => { res.end(); } );
SD4x-4.3 127
Middleware, Routes, and Routers
• We may find that the same combinations of
middleware functions are being used in
multiple routes

• We can combine middleware functions into


“sub- routes” using Routers and then use those
in our routes

Property of Penn Engineering, Chris Murphy SD4x-4.3 154


var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 155
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 156
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 157
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 158
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 159
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 160
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 161
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 162
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 163
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 164
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 165
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 166
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 167
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 168
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 169
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 170
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 171
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 172
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 173
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 174
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 175
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 176
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 177
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder, header,


greeter, footer, (req, res) => { res.end(); } );

app.use('/admin', logger, adminName, header,


greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 178
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder,


commonRoute,
(req, res) =>
{ res.end(); } );
app.use('/admin', logger, adminName, header,
greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 179
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder,


commonRoute,
(req, res) =>
{ res.end(); } );
app.use('/admin', logger, adminName, header,
greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 180
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder,


commonRoute,
(req, res) =>
{ res.end(); } );
app.use('/admin', logger, adminName, header,
greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 181
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder,


commonRoute,
(req, res) =>
{ res.end(); } );
app.use('/admin', logger, adminName, header,
greeter, footer, (req, res) => { res.end(); } );

SD4x-4.3 182
var nameFinder = (req, res, next) => { . . . }

var greeter = (req, res, next) => { . . . }

var adminName = (req, res, next) => { . . . }

var logger = (req, res, next) => { . . . }

var header = (req, res, next) => { . . . }

var footer = (req, res, next) => { . . . }

var commonRoute = express.Router();


commonRoute.use(header, greeter, footer);

app.use('/welcome', logger, nameFinder,


commonRoute,
(req, res) =>
{ res.end(); } );

app.use('/admin', logger, adminName,


commonRoute, SD4x-4.3 183
Summary
• Routing allows us to specify different
functionality for different HTTP requests
• Routing uses middleware functions, each of
which handles a different part of the functionality
• Middleware functions can be chained together
and can pass values to each other by modifying
the Request object
• Routers allow us to combine middleware
functions into common “sub-routes”

Property of Penn Engineering, Chris Murphy SD4x-4.3 184

You might also like