All files / src server.js

86.84% Statements 33/38
37.5% Branches 3/8
0% Functions 0/4
86.84% Lines 33/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 637x 7x 7x 7x 7x 7x   7x 7x 7x 7x 7x 7x 7x   7x   7x             7x   7x       7x 7x 7x 7x 7x   7x 7x 7x 7x 7x 7x 7x   7x         7x               7x       7x  
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const morgan = require('morgan');
const rateLimit = require('express-rate-limit');
const config = require('./config');
 
const authRoutes = require('./routes/auth');
const userRoutes = require('./routes/users');
const employerRoutes = require('./routes/employers');
const candidateRoutes = require('./routes/candidates');
const jobRoutes = require('./routes/jobs');
const applicationRoutes = require('./routes/applications');
const resumeRoutes = require('./routes/resumes');
 
const app = express();
 
const authLimiter = rateLimit({
  windowMs: config.rateLimit.windowMs,
  max: config.rateLimit.max,
  standardHeaders: true,
  legacyHeaders: false
});
 
app.disable('x-powered-by');
 
const corsOrigins = config.corsOrigin === '*'
  ? undefined
  : config.corsOrigin.split(',').map((origin) => origin.trim());
 
app.use(helmet());
app.use(cors(corsOrigins ? { origin: corsOrigins, credentials: true } : {}));
app.use(morgan(config.env === 'production' ? 'combined' : 'dev'));
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true }));
 
app.use('/api/auth', authLimiter, authRoutes);
app.use('/api/users', userRoutes);
app.use('/api/employers', employerRoutes);
app.use('/api/candidates', candidateRoutes);
app.use('/api/jobs', jobRoutes);
app.use('/api/applications', applicationRoutes);
app.use('/api/resumes', resumeRoutes);
 
app.get('/api/health', (req, res) => {
  res.json({ status: 'OK', timestamp: new Date().toISOString() });
});
 
// eslint-disable-next-line no-unused-vars
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({
    error: 'Something went wrong!',
    message: config.env === 'development' ? err.message : 'Internal server error'
  });
});
 
app.use('*', (req, res) => {
  res.status(404).json({ error: 'Route not found' });
});
 
module.exports = app;