// src/app.js const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const compression = require('compression'); // author and version from our package.json file // const { author, version } = require('../package.json'); const logger = require('./logger'); const pino = require('pino-http')({ // Use our default logger instance, which is already configured logger, }); const passport = require('passport'); const authenticate = require('./auth'); const { createErrorResponse } = require('./response'); // Create an express app instance we can use to attach middleware and HTTP routes const app = express(); // Use pino logging middleware app.use(pino); // Use helmetjs security middleware app.use(helmet()); // Use CORS middleware so we can make requests across origins app.use(cors()); // Use gzip/deflate compression middleware app.use(compression()); // Set up our passport authentication middleware passport.use(authenticate.strategy()); app.use(passport.initialize()); // Define our routes app.use('/', require('./routes')); // Add 404 middleware to handle any requests for resources that can't be found app.use((req, res) => { //Refactor to use createErrorResponse function in response.js const errorResponse = createErrorResponse(404, 'not found'); res.status(404).json(errorResponse); /*res.status(404).json({ status: 'error', error: { message: 'not found', code: 404, }, });*/ }); // Add error-handling middleware to deal with anything else // eslint-disable-next-line no-unused-vars app.use((err, req, res, next) => { // We may already have an error response we can use, but if not, // use a generic `500` server error and message. const status = err.status || 500; const message = err.message || 'unable to process request'; // If this is a server error, log something so we can see what's going on. if (status > 499) { logger.error({ err }, `Error processing request`); } res.status(status).json({ status: 'error', error: { message, code: status, }, }); }); // Export our `app` so we can access it in server.js module.exports = app;