Handle 404 error with Express 4
express, node.js
Solution
This is working for me:
var express = require('express');
var app = express();
app.use(express.static('public'));
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.status(404);
res.send('404: File Not Found');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
Folder structure,
Now when we issue the request like this
http://localhost:3000/sample
This has been handled by the middleware.
UPDATE
The way to show the html files without writing the get request is just another middleware like this
app.use(express.static('public'));
app.use(express.static('views'));
Add the 'views' middleware exactly after the 'public'.
Now if we give
http://localhost:3000/index.html
The page is rendered.
Problem
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', Date.now()); next(); }); // Handle 404 app.use(function(req, res, next) { if(req.accepts('html') && res.status(404)) { res.render('404.jade'); return; } }); ```