-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.js
63 lines (60 loc) · 3.19 KB
/
app.js
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
/********** Importamos el módulo 'express' usado para crear nuestra API **********/
const express = require('express');
/********** Importamos el módulo 'body-parser' para analizar los cuerpos en cada solicitud o request **********/
const parser = require('body-parser');
/********** Importamos el módulo 'swagger-ui-express' usado para generar la IU de nuestra documentación de la API hecha con swagger **********/
const swaggerUi = require('swagger-ui-express');
/********** Importamos el archivo swagger.json que tiene la documentación de nuestra API **********/
// const swaggerDocument = require('./doc/swagger.json');
require('dotenv').config();
/********** Creamos nuestra app Express **********/
const app = express();
/********** Definimos el puerto donde va a correr nuestra app **********/
const port = process.env.PORT || '3000';
/********** Middleware para el manejo de las CORSS **********/
app.use((req, res, next) => {
// Sitio web que esta permitido conectarse a la API
res.setHeader('Access-Control-Allow-Origin', process.env.APP_BASE_URL);
// Metodos http permitidos
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Encabezados permitidos
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Continua al siguiente middleware
next();
});
/********** Middleware para exponer archivos de la carpeta /public del proyecto mediante el prefijo de vía de acceso con el mismo nombre /public. **********/
app.use(process.env.APP_SWAGGER_URL, express.static(__dirname + process.env.APP_SWAGGER_URL));
app.use('/public', express.static(__dirname + '/public'));
/********** Cuerpo de solicitud json para soportar hasta 500 mb**********/
app.use(parser.json({ limit: '10mb' }));
/********** Cuerpo de solicitud urlencoded **********/
app.use(parser.urlencoded({ limit: '500mb', extended: false }));
/********** Ruta raiz de la API => redireccionamos a la documentación **********/
app.get('/', (req, res) => {
// res.send("Welcome!");
res.redirect('/api-docs');
});
/********** Importamos todas las rutas de la API**********/
const apiRouter = require('./routes/api');
/********** Rutas de nuestra API **********/
app.use('/api', apiRouter);
/********** Para cargar nuestra documentación swagger.json desde una URL **********/
const options = {
swaggerOptions: {
url: process.env.APP_BASE_URL + process.env.APP_SWAGGER_URL + process.env.APP_SWAGGER_FILE
},
explorer: true
}
/********** Ruta de nuestra documentación en swagger **********/
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(null, options));
app.use(function (req, res, next) {
res.status(404);
res.send(`<body style="margin: 0px; background: #000;"><center><img src='${process.env.APP_BASE_URL}/public/images/404.png' alt="404 Not Found"></center>`);
return;
});
/********** Nuestra app esta lista para escuchar conexiones en http://localhost en el puerto seleccionado **********/
app.listen(port, () => {
console.log(`App corriendo en http://localhost:${port}`);
console.log(`Documentación en http://localhost:${port}/api-docs`);
console.log(`Archivo swagger.json en http://localhost:${port}/doc/swagger.json`);
});