#Express.js Backend Template
A template for building a backend application using Node.js and Express.js.
#Project Setup
bashmkdir my-app
cd my-app
npm init -y
npm install express cors
npm install --save-dev nodemon
Update package.json to add a dev script:
json{
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}
}
#Basic Server Structure
jsconst express = require("express");
const cors = require("cors");
const app = express();
const PORT = 3000;
// Middleware
app.use(express.json());
app.use(cors());
// Routes
app.get("/", (req, res) => {
res.send("Hello World!");
});
// Start server
app.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
});
#CORS Configuration
#Allow All Origins (Development)
jsapp.use(cors());
#Restricted Origins (Production)
jsapp.use(
cors({
origin: "http://localhost:5173", // e.g. Vite / React frontend
methods: ["GET", "POST", "PUT", "DELETE"],
allowedHeaders: ["Content-Type", "Authorization"],
})
);
#Separate CORS Middleware File (middleware/cors.js)
jsconst cors = require("cors");
const corsOptions = {
origin: process.env.CLIENT_URL || "http://localhost:5173",
methods: ["GET", "POST", "PUT", "DELETE"],
allowedHeaders: ["Content-Type", "Authorization"],
};
module.exports = cors(corsOptions);
Register in index.js:
jsconst corsMiddleware = require("./middleware/cors");
app.use(corsMiddleware);
Without CORS, the browser will block requests from a frontend running on
a different port — e.g. React/Vite on5173→ Express on3000.
#Routing
#Inline Routes
jsapp.get("/users", (req, res) => {
res.json({ users: [] });
});
app.post("/users", (req, res) => {
const { name, email } = req.body;
res.status(201).json({ message: "User created", name, email });
});
app.put("/users/:id", (req, res) => {
const { id } = req.params;
res.json({ message: `User ${id} updated` });
});
app.delete("/users/:id", (req, res) => {
const { id } = req.params;
res.json({ message: `User ${id} deleted` });
});
#Separate Router File (routes/users.js)
jsconst express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
res.json({ users: [] });
});
router.post("/", (req, res) => {
const { name, email } = req.body;
res.status(201).json({ message: "User created", name, email });
});
module.exports = router;
Register the router in index.js:
jsconst userRoutes = require("./routes/users");
app.use("/users", userRoutes);
#URL Parameters & Query Strings
js// URL param: GET /users/42
app.get("/users/:id", (req, res) => {
const { id } = req.params;
res.json({ userId: id });
});
// Query string: GET /search?name=John&age=25
app.get("/search", (req, res) => {
const { name, age } = req.query;
res.json({ name, age });
});
#Middleware
js// Global logging middleware
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next();
});
// Route-specific middleware
function isAuthenticated(req, res, next) {
const token = req.headers["authorization"];
if (!token) return res.status(401).json({ error: "Unauthorized" });
next();
}
app.get("/protected", isAuthenticated, (req, res) => {
res.json({ message: "Access granted" });
});
#Project Structure (Recommended)
textmy-app/
├── routes/
│ └── users.js
├── controllers/
│ └── userController.js
├── middleware/
│ ├── auth.js
│ └── cors.js
├── index.js
└── package.json