Nodejs restAPI for managing school data
- Health Monitoring: System health checks with memory usage and uptime metrics
- Rate Limiting: IP-based rate limiting (30 requests/min) to prevent abuse
- Logging: Clean logs of all operations using debug library
- OpenAPI/Swagger: Interactive API documentation page
- Geospatial Search: Find schools sorted according to distance from user
- Indexed Geolocation: Database indexing on latitude/longitude columns for faster queries
- Connection Pooling: MySQL connection pool for efficient database connections
- In-Memory Distance Sorting: Optimized distance calculations using Haversine formula
- Response Caching: Built-in Express response caching for frequently accessed data
src/
├── config/
│ └── db.js # Database configuration
├── controllers/
│ └── school.controller.js # controller logic
├── middleware/
│ ├── errorHandler.js # error handling
│ └── rateLimiter.js # rate limiting logic
├── models/
│ └── school.js # database interaction logic
├── routes/
│ └── school.route.js
├── utils/
│ ├── geospatial.js
│ ├── asyncHandler # wrapper for async operations
│ └── validator.js
├── openapi/
│ └── spec.yaml # OpenAPI/Swagger spec file
└── server.js
Clear API docs swagger page generated from spec file available at /api-docs
DBHOST=mysql-host
DBUSER=database-user
DBPASSWORD=database-password
DBPORT=database-port
DBNAME=schools
PORT=3000# Install dependencies
npm install
# Start development server
npm run dev
# Run tests
npm test-
POST /api/v3/app/addSchool: Add a new school -
GET /api/v3/app/listSchools: get list of schools sorted according to proximity -
GET /health: System health status
- Helmet.js: secure HTTP headers
- CORS: cross-origin resource sharing
- Input Validation: request validation
- Rate Limiting: protection against abuse
used debug library with the following namespaces:
app:server: main server operationsapp:database: Database configurationapp:school-controller: controller fileapp:school-model: operations on db
- Redis Caching: Redis for caching frequently accessed data
- Query Optimization: Database indexing and query optimization techniques
- CAPTCHA Integration: CAPTCHA verification in frontend to prevent DDOS attacks
- JWT Authentication: Role-based access control with JWT tokens
- API Key Management: API key-based authentication for external services
- Batch Operations: Bulk school data import/export
- Real-time Updates: WebSocket integration for live data updates
