app.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. const express = require('express');
  2. const path = require('path');
  3. const morgan = require('morgan');
  4. const helmet = require('helmet');
  5. const compression = require('compression');
  6. const app = express();
  7. // const movieRouter = require('./routes/movieRoutes');
  8. const viewRouter = require('./routes/viewRoutes');
  9. const globalErrorHandler = require('./controllers/errorControllers');
  10. const { AppError } = require('./utils/errorUtils');
  11. //-------------------------------------------------------------------------//
  12. // GLOBAL MIDDLEWARES
  13. //-------------------------------------------------------------------------//
  14. app.use(compression()); // for compressing response bodies
  15. app.use(
  16. // for making the app more secure by setting some security headers(like CORS)
  17. helmet({
  18. contentSecurityPolicy: {
  19. directives: {
  20. // only allowing images from 'm.media-amazon.com' as crossorigin
  21. 'img-src': ["'self'", 'm.media-amazon.com'],
  22. },
  23. },
  24. // 'crossorigin' attribute is needed in the img tag where images are fetched from 'm.media-amazon.com' if the policy below is set to true. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy for more details
  25. crossOriginEmbedderPolicy: false,
  26. })
  27. );
  28. app.set('view engine', 'pug'); // setting pug as a view engine
  29. app.set('views', path.join(__dirname, 'views/pug')); // directory from where html template will be sourced
  30. app.use(express.static(path.join(__dirname, 'public'))); // directory from where files like css, images, fonts, will be sourced
  31. if (process.env.NODE_ENV === 'development') app.use(morgan('dev')); // for logging requests
  32. // app.use(express.json({ limit: '3mb' })); // for parsing json
  33. //-------------------------------------------------------------------------//
  34. // ROUTER MIDDLEWARES
  35. //-------------------------------------------------------------------------//
  36. // app.use('/api/v1/movies', movieRouter); // sub-router for movie related endpoints
  37. app.use('/', viewRouter); // for html pages
  38. //-------------------------------------------------------------------------//
  39. // GLOBAL ERROR HANDLING
  40. //-------------------------------------------------------------------------//
  41. app.all('*', (req, res, next) => {
  42. next(
  43. new AppError(
  44. `the route you requested(${req.originalUrl}) doesn't exist`,
  45. 404
  46. )
  47. );
  48. });
  49. app.use(globalErrorHandler); // handling errors in every middleware
  50. module.exports = app;