express-template.md

#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 on 5173 → Express on 3000.

#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" });
});

textmy-app/
├── routes/
│   └── users.js
├── controllers/
│   └── userController.js
├── middleware/
│   ├── auth.js
│   └── cors.js
├── index.js
└── package.json