AlexisP AlexisP - 9 months ago 78
Node.js Question

Handle 404 error with Express 4

I am using Express 4 and I have about 50 html pages. I'm trying to handle 404 errors but can't figure out how. I don't want to manually define all the routers within node. Is there a way to dynamically redirect to a 404 Jade template if a page doesn't exist?

I tried this code but didn't work:

app.enable('verbose errors');
app.set('port', 3000);

app.use(express.static(__dirname + '/html/'));

var server = http.createServer(app);
server.listen(app.get('port'), function() {
console.log('ONLINE !');

app.use(function(req, res, next) {
console.log('GET ' + req.originalUrl)
console.log('At %d',;

// Handle 404
app.use(function(req, res, next) {
if(req.accepts('html') && res.status(404)) {

Answer Source

I tried this. This is working for me.

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


app.get('/', function (req, res) {
    res.send('Hello World!');

app.get('/employee', function (req, res) {
    res.send('Employee route !!');

// Handle 404 - Keep this as a last route
app.use(function(req, res, next) {
    res.send('404: File Not Found');

app.listen(3000, function () {
    console.log('Example app listening on port 3000!');

Folder structure,

enter image description here

Now when we issue the request like this


This has been handled by the middleware.


The way to show the html files without writing the get request is just another middleware like this


Add the 'views' middleware exactly after the 'public'.

Now if we give


The page is rendered.