Smart Library Docs

Server Entry Point

Detailed breakdown of server.js — the main Express application entry point.

Server Entry Point — server.js

The file server.js is the primary entry point for the SLMS backend. It initializes the Express application, registers all middleware, connects to MongoDB, mounts all API route modules, and starts the HTTP server.

File Location

backend/server.js

Complete Breakdown

1. Dependency Imports

const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
require('dotenv').config();
const connectDB = require('./utils/db');
ImportPurpose
expressCore web framework
corsCross-Origin Resource Sharing — allows frontend on :3000 to call API on :5000
helmetSets secure HTTP headers automatically
morganLogs every HTTP request in dev format
dotenvLoads .env variables into process.env
connectDBCustom utility to establish MongoDB connection

2. Middleware Registration Order

app.use(express.json());    // Parse JSON bodies
app.use(cors());            // Allow cross-origin requests
app.use(helmet());          // Security headers
app.use(morgan('dev'));     // Request logging

Order matters. express.json() must come before route handlers so req.body is populated. cors() and helmet() should precede routes for security.

3. Database Connection

connectDB();

Called once at startup. See Backend Utilities → Database Connection for implementation details.

4. Route Mounting

app.use('/api/v1/auth',        authRoutes);
app.use('/api/v1/users',       userRoutes);
app.use('/api/v1/books',       bookRoutes);
app.use('/api/v1/circulation', circulationRoutes);
app.use('/api/v1/fines',       fineRoutes);
app.use('/api/v1/dashboard',   dashboardRoutes);

All routes are namespaced under /api/v1/ for API versioning.

5. Health Check

app.get('/health', (req, res) => {
  res.status(200).json({ status: 'ok', message: 'SLMS API is running' });
});

A simple endpoint for infrastructure monitoring — returns 200 OK when the server is responsive.

6. Error Handlers

// 404 — No route matched
app.use((req, res) => {
  res.status(404).json({ error: 'Endpoint not found' });
});

// 500 — Unhandled errors
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: 'Internal Server Error' });
});

7. Server Start

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`SLMS API running on port ${PORT}`);
});

npm Scripts

ScriptCommandPurpose
npm startnode server.jsProduction start
npm run devnodemon server.jsDevelopment with auto-reload

On this page