Serve Web Applications and Static Files with Express
Creating the Server
Create a folder for the Express server. Create a file called index.js, open the console, and write:
npm initComplete the requested options. Then install the Express module using the following command:
npm install --save expressCreate a folder within the project where the static files will go. In this case, the folder will be called app. The file tree should look like this:
|-- app
|-- node_modules
|-- index.js
|-- package-lock.json
|-- package.jsonDirectory Configuration
Place the static files in the /app folder, for example, your website, images, CSS files, etc. To make the Express server use that folder as the source for static files, you would use the express.static() code as follows in index.js:
const express = require('express');
const app = express();
// tell the server to use /app as the source for static files
app.use(express.static('app'));
// run the server on port 3000
app.listen(3000, () => console.log('Running on http://localhost:3000'));If, for example, there were files named cat.jpeg, main.css, index.html in /app, we could access them from the server with the routes:
http://localhost:3000/cat.jpeg
http://localhost:3000/main.css
http://localhost:3000/index.htmlIf, for example, there was another folder called static that we also wanted to use as a source for static files, we simply need to call the function again:
// tell the server to use /app and /static as sources for static files
app.use(express.static('app'));
app.use(express.static('static'));Express will search for files in the order defined by the static directories.
Custom Routes
If we want to create a custom route through which to access static files, we can do so by passing the name as the first parameter of the function as follows:
// tell the server to use /app and /static as sources for static files
app.use('/static', express.static('app'));
app.use('/static', express.static('static'));We would access the files this way:
http://localhost:3000/static/cat.jpeg
http://localhost:3000/static/main.css
http://localhost:3000/static/index.htmlConfiguration for SPA
If we have an application developed in frameworks such as Angular, React, or Vue and we want our server to serve these applications and redirect routes to be handled by the web application, we can configure the server as follows:
Assuming our application is in a folder called /app
const express = require('express');
const path = require('path');
const app = express();
// tell the server to use /app as the source for static files
app.use(express.static('app'));
// redirect all routes to be handled by our application
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname + '/app/index.html'));
});
// run the server on port 3000
app.listen(3000, () => console.log('Running on http://localhost:3000'));Conclusions
Through express.static(), handling static files becomes much simpler. It also allows us to use an Express server to serve web applications.
If you only need to serve a static website, you may not need a server as such. There are free options for hosting web applications, including Github Pages, Netlify, Firebase Hosting, and Surge.
I hope this article is helpful to you.

