Add static resources to Node.js server
app.use('/static', express.static('public'));
Modularize your routes, for example, in /routes/index.js:
const express = require("express"); const router = express.Router(); router.get('/', (req, res) => { ... }); ... module.export = router;
Then in your main app.js
const routes = require('./routes'); app.use(routes);
Setup CORS for your API app | npm i cors --save
... var cors = require("cors"); ... app.use(cors({ origin: ["http://localhost:8000"], methods: ["GET", "POST"], allowedHeaders: ["Content-Type", "Authorization"] })); ...
Logging with Morgan | npm i morgan --save
... var morgan = require('morgan'); ... app.use(morgan('common'));
Configuring Node.js clusters in cluster.js | Clusters
var cluster = require("cluster"); var os = require("os"); const CPUS = os.cpus(); if (cluster.isMaster) { for (var i = 0; i < CPUS.length; i++) { cluster.fork() }); cluster.on("listening", function(worker) { console.log(`Cluster ${ worker.process.pid } connected`); }); cluster.on("disconnect", function(worker) { console.log(`Cluster ${ worker.process.pid } disconnected`); }); cluster.on("exit", function(worker) { console.log(`Cluster ${ worker.process.pid } is dead`); // Ensuring a new cluster will start if an old one dies cluster.fork(); }); } else { require("./index.js"); }
Then run: nodemon cluster.js
GZIP Compression | npm i compression --save | Compression
... var compression = require('compression'); ... app.use(compression(6)); // number indicates level of compression
Protect from some forms of attach with Helmet | npm i helmet --save
... var helmet = require('helmet'); ... app.use(helmet());
Credit: JScrambler Blog