jerkjs 2.1.1 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/CHANGELOG.md +3 -2
  2. package/README.md +1 -1
  3. package/examples.arj +0 -0
  4. package/index.js +1 -1
  5. package/lib/middleware/compressor.js +34 -18
  6. package/package.json +1 -1
  7. package/standard/CompressionTestController.js +38 -0
  8. package/standard/HealthController.js +16 -0
  9. package/standard/HomeController.js +12 -0
  10. package/standard/ProductController.js +18 -0
  11. package/standard/README.md +47 -0
  12. package/standard/UserController.js +23 -0
  13. package/standard/package.json +22 -0
  14. package/standard/routes.json +58 -0
  15. package/standard/server.js +140 -0
  16. package/cookies.txt +0 -5
  17. package/examples/advanced/controllers/productController.js +0 -64
  18. package/examples/advanced/controllers/userController.js +0 -85
  19. package/examples/advanced/routes.json +0 -51
  20. package/examples/advanced_example.js +0 -93
  21. package/examples/basic/controllers/userController.js +0 -85
  22. package/examples/basic_example.js +0 -72
  23. package/examples/frontend/README.md +0 -71
  24. package/examples/frontend/app.js +0 -71
  25. package/examples/frontend/controllers/apiController.js +0 -39
  26. package/examples/frontend/controllers/authController.js +0 -220
  27. package/examples/frontend/controllers/formController.js +0 -47
  28. package/examples/frontend/controllers/messageController.js +0 -96
  29. package/examples/frontend/controllers/pageController.js +0 -178
  30. package/examples/frontend/controllers/staticController.js +0 -167
  31. package/examples/frontend/routes.json +0 -90
  32. package/examples/hooks/app.js +0 -136
  33. package/examples/hooks/controllers/authController.js +0 -54
  34. package/examples/hooks/controllers/mainController.js +0 -41
  35. package/examples/hooks/controllers/productController.js +0 -39
  36. package/examples/hooks/controllers/userController.js +0 -69
  37. package/examples/hooks/routes.json +0 -51
  38. package/examples/hooks/views/home.html +0 -50
  39. package/examples/mvc_example/app.js +0 -138
  40. package/examples/mvc_example/views/home/index.html +0 -26
  41. package/examples/mvc_example/views/home/simple.html +0 -3
  42. package/examples/mvc_example/views/layout.html +0 -23
  43. package/examples/mvc_example/views/test.html +0 -3
  44. package/examples/mvc_example/views/user/invalid.html +0 -6
  45. package/examples/mvc_example/views/user/list.html +0 -36
  46. package/examples/mvc_example/views/user/notfound.html +0 -6
  47. package/examples/mvc_example/views/user/profile.html +0 -11
  48. package/examples/mvc_routes_example/app.js +0 -34
  49. package/examples/mvc_routes_example/controllers/mainController.js +0 -27
  50. package/examples/mvc_routes_example/controllers/productController.js +0 -47
  51. package/examples/mvc_routes_example/controllers/userController.js +0 -76
  52. package/examples/mvc_routes_example/routes.json +0 -30
  53. package/examples/mvc_routes_example/views/layout.html +0 -31
  54. package/examples/mvc_routes_example/views/main/index.html +0 -11
  55. package/examples/mvc_routes_example/views/product/catalog.html +0 -24
  56. package/examples/mvc_routes_example/views/user/invalid.html +0 -6
  57. package/examples/mvc_routes_example/views/user/list.html +0 -40
  58. package/examples/mvc_routes_example/views/user/notfound.html +0 -6
  59. package/examples/mvc_routes_example/views/user/profile.html +0 -18
  60. package/examples/mvc_welcome/README.md +0 -34
  61. package/examples/mvc_welcome/app.js +0 -50
  62. package/examples/mvc_welcome/controllers/welcomeController.js +0 -41
  63. package/examples/mvc_welcome/package.json +0 -26
  64. package/examples/mvc_welcome/views/home/welcome.html +0 -82
  65. package/examples/performance_demo/app.js +0 -172
  66. package/examples/performance_demo_with_hooks/README.md +0 -52
  67. package/examples/performance_demo_with_hooks/app.js +0 -290
  68. package/examples/public/README.md +0 -92
  69. package/examples/public/app.js +0 -72
  70. package/examples/public/controllers/healthController.js +0 -20
  71. package/examples/public/controllers/mainController.js +0 -22
  72. package/examples/public/controllers/userController.js +0 -139
  73. package/examples/public/routes.json +0 -51
  74. package/examples/v2/README.md +0 -72
  75. package/examples/v2/app.js +0 -74
  76. package/examples/v2/app_fixed.js +0 -74
  77. package/examples/v2/controllers/authController.js +0 -64
  78. package/examples/v2/controllers/mainController.js +0 -24
  79. package/examples/v2/controllers/protectedController.js +0 -12
  80. package/examples/v2/controllers/userController.js +0 -16
  81. package/examples/v2/package.json +0 -27
  82. package/examples/v2/routes.json +0 -30
  83. package/examples/v2/test_api.sh +0 -47
  84. package/examples/v2/tokens_example.sqlite +0 -0
  85. package/examples/v2.1_firewall_demo/README.md +0 -113
  86. package/examples/v2.1_firewall_demo/app.js +0 -182
  87. package/examples/v2.1_firewall_demo/package.json +0 -27
  88. package/examples/v2.1_hooks_demo/README.md +0 -85
  89. package/examples/v2.1_hooks_demo/app.js +0 -101
  90. package/examples/v2.1_hooks_demo/controllers/hooksController.js +0 -29
  91. package/examples/v2.1_hooks_demo/controllers/mainController.js +0 -18
  92. package/examples/v2.1_hooks_demo/package.json +0 -27
  93. package/examples/v2.1_hooks_demo/routes.json +0 -16
  94. package/examples/v2.1_openapi_demo/README.md +0 -82
  95. package/examples/v2.1_openapi_demo/app.js +0 -296
  96. package/examples/v2.1_openapi_demo/package.json +0 -26
  97. package/examples/v2_cors/README.md +0 -82
  98. package/examples/v2_cors/app.js +0 -108
  99. package/examples/v2_cors/package.json +0 -23
  100. package/examples/v2_json_auth/README.md +0 -83
  101. package/examples/v2_json_auth/app.js +0 -72
  102. package/examples/v2_json_auth/controllers/authController.js +0 -67
  103. package/examples/v2_json_auth/controllers/mainController.js +0 -16
  104. package/examples/v2_json_auth/controllers/protectedController.js +0 -12
  105. package/examples/v2_json_auth/controllers/tokenController.js +0 -28
  106. package/examples/v2_json_auth/controllers/userController.js +0 -15
  107. package/examples/v2_json_auth/package.json +0 -26
  108. package/examples/v2_json_auth/routes.json +0 -37
  109. package/examples/v2_json_auth/tokens.json +0 -20
  110. package/examples/v2_mariadb_auth/README.md +0 -94
  111. package/examples/v2_mariadb_auth/app.js +0 -81
  112. package/examples/v2_mariadb_auth/controllers/authController.js +0 -95
  113. package/examples/v2_mariadb_auth/controllers/mainController.js +0 -31
  114. package/examples/v2_mariadb_auth/controllers/protectedController.js +0 -12
  115. package/examples/v2_mariadb_auth/controllers/userController.js +0 -17
  116. package/examples/v2_mariadb_auth/package.json +0 -27
  117. package/examples/v2_mariadb_auth/routes.json +0 -37
  118. package/examples/v2_no_auth/README.md +0 -75
  119. package/examples/v2_no_auth/app.js +0 -72
  120. package/examples/v2_no_auth/controllers/healthController.js +0 -14
  121. package/examples/v2_no_auth/controllers/mainController.js +0 -19
  122. package/examples/v2_no_auth/controllers/productController.js +0 -31
  123. package/examples/v2_no_auth/controllers/publicController.js +0 -16
  124. package/examples/v2_no_auth/package.json +0 -22
  125. package/examples/v2_no_auth/routes.json +0 -37
  126. package/examples/v2_oauth/README.md +0 -70
  127. package/examples/v2_oauth/app.js +0 -90
  128. package/examples/v2_oauth/controllers/mainController.js +0 -45
  129. package/examples/v2_oauth/controllers/oauthController.js +0 -247
  130. package/examples/v2_oauth/controllers/protectedController.js +0 -13
  131. package/examples/v2_oauth/controllers/userController.js +0 -17
  132. package/examples/v2_oauth/package.json +0 -26
  133. package/examples/v2_oauth/routes.json +0 -44
  134. package/examples/v2_openapi/README.md +0 -77
  135. package/examples/v2_openapi/app.js +0 -222
  136. package/examples/v2_openapi/controllers/authController.js +0 -52
  137. package/examples/v2_openapi/controllers/mainController.js +0 -26
  138. package/examples/v2_openapi/controllers/productController.js +0 -17
  139. package/examples/v2_openapi/controllers/userController.js +0 -27
  140. package/examples/v2_openapi/package.json +0 -26
  141. package/examples/v2_openapi/routes.json +0 -37
  142. package/v2examplle/v2_json_auth/README.md +0 -83
  143. package/v2examplle/v2_json_auth/app.js +0 -72
  144. package/v2examplle/v2_json_auth/controllers/authController.js +0 -67
  145. package/v2examplle/v2_json_auth/controllers/mainController.js +0 -16
  146. package/v2examplle/v2_json_auth/controllers/protectedController.js +0 -12
  147. package/v2examplle/v2_json_auth/controllers/tokenController.js +0 -28
  148. package/v2examplle/v2_json_auth/controllers/userController.js +0 -15
  149. package/v2examplle/v2_json_auth/package.json +0 -26
  150. package/v2examplle/v2_json_auth/routes.json +0 -37
  151. package/v2examplle/v2_json_auth/tokens.json +0 -20
  152. package/v2examplle/v2_mariadb_auth/README.md +0 -94
  153. package/v2examplle/v2_mariadb_auth/app.js +0 -81
  154. package/v2examplle/v2_mariadb_auth/controllers/authController.js +0 -95
  155. package/v2examplle/v2_mariadb_auth/controllers/mainController.js +0 -31
  156. package/v2examplle/v2_mariadb_auth/controllers/protectedController.js +0 -12
  157. package/v2examplle/v2_mariadb_auth/controllers/userController.js +0 -17
  158. package/v2examplle/v2_mariadb_auth/package.json +0 -27
  159. package/v2examplle/v2_mariadb_auth/routes.json +0 -37
  160. package/v2examplle/v2_sqlite_auth/README.md +0 -72
  161. package/v2examplle/v2_sqlite_auth/app.js +0 -74
  162. package/v2examplle/v2_sqlite_auth/app_fixed.js +0 -74
  163. package/v2examplle/v2_sqlite_auth/controllers/authController.js +0 -64
  164. package/v2examplle/v2_sqlite_auth/controllers/mainController.js +0 -24
  165. package/v2examplle/v2_sqlite_auth/controllers/protectedController.js +0 -12
  166. package/v2examplle/v2_sqlite_auth/controllers/userController.js +0 -16
  167. package/v2examplle/v2_sqlite_auth/package.json +0 -27
  168. package/v2examplle/v2_sqlite_auth/routes.json +0 -30
  169. package/v2examplle/v2_sqlite_auth/test_api.sh +0 -47
  170. package/v2examplle/v2_sqlite_auth/tokens_example.sqlite +0 -0
@@ -1,51 +0,0 @@
1
- [
2
- {
3
- "path": "/api/users",
4
- "method": "GET",
5
- "auth": "jwt",
6
- "authOptions": {
7
- "jwtSecret": "secret-jwt-key"
8
- },
9
- "controller": "./basic/controllers/userController.js",
10
- "handler": "getUsers"
11
- },
12
- {
13
- "path": "/api/users/:id",
14
- "method": "GET",
15
- "auth": "jwt",
16
- "authOptions": {
17
- "jwtSecret": "secret-jwt-key"
18
- },
19
- "controller": "./basic/controllers/userController.js",
20
- "handler": "getUserById"
21
- },
22
- {
23
- "path": "/api/users",
24
- "method": "POST",
25
- "auth": "apiKey",
26
- "authOptions": {
27
- "apiKeyHeader": "X-API-Key",
28
- "apiKeyValues": ["secret-key-123"]
29
- },
30
- "controller": "./basic/controllers/userController.js",
31
- "handler": "createUser"
32
- },
33
- {
34
- "path": "/api/products",
35
- "method": "GET",
36
- "auth": "none",
37
- "controller": "./advanced/controllers/productController.js",
38
- "handler": "getProducts"
39
- },
40
- {
41
- "path": "/api/products/:id",
42
- "method": "PUT",
43
- "auth": "apiKey",
44
- "authOptions": {
45
- "apiKeyHeader": "X-API-Key",
46
- "apiKeyValues": ["secret-key-123"]
47
- },
48
- "controller": "./advanced/controllers/productController.js",
49
- "handler": "updateProduct"
50
- }
51
- ]
@@ -1,93 +0,0 @@
1
- /**
2
- * Ejemplo real de uso del framework JERK
3
- * Este script demuestra cómo cargar rutas desde un archivo JSON
4
- * y usar los controladores definidos en el archivo de rutas
5
- */
6
-
7
- const path = require('path');
8
- const { JERK, RouteLoader, Authenticator, Logger } = require('../index');
9
-
10
- // Crear instancia del logger
11
- const logger = new Logger({ level: 'info', timestamp: true });
12
-
13
- logger.info('Iniciando ejemplo real de carga de rutas desde JSON');
14
-
15
- // Crear instancia del servidor
16
- const server = new JERK({
17
- port: 6000,
18
- host: 'localhost'
19
- });
20
-
21
- // Crear instancia del autenticador
22
- const authenticator = new Authenticator();
23
-
24
- // Registrar estrategias de autenticación que se usan en routes.json
25
- authenticator.use('apiKey', authenticator.apiKeyStrategy('X-API-Key', ['secret-key-123']));
26
- authenticator.use('jwt', authenticator.jwtStrategy('secret-jwt-key'));
27
-
28
- // Cargar rutas desde el archivo JSON
29
- const routeLoader = new RouteLoader();
30
-
31
- // Middleware de logging
32
- server.use((req, res, next) => {
33
- logger.info(`${req.method} ${req.url} - IP: ${req.connection.remoteAddress}`);
34
- next();
35
- });
36
-
37
- logger.info('Cargando rutas desde advanced/routes.json...');
38
-
39
- // Cargar las rutas desde el archivo JSON
40
- // Cambiamos temporalmente el directorio de trabajo para que las rutas relativas funcionen correctamente
41
- const originalCwd = process.cwd();
42
- process.chdir(__dirname); // Cambiar al directorio actual (examples)
43
-
44
- routeLoader.loadRoutes(server, './advanced/routes.json')
45
- .then(routes => {
46
- process.chdir(originalCwd); // Restaurar directorio original
47
-
48
- logger.info(`Cargadas ${routes.length} rutas desde el archivo JSON:`);
49
- routes.forEach((route, index) => {
50
- logger.info(` ${index + 1}. ${route.method} ${route.path} -> ${route.controller}#${route.handler}`);
51
- });
52
-
53
- logger.info('\nIniciando servidor en http://localhost:6000');
54
-
55
- // Iniciar el servidor
56
- const httpServer = server.start();
57
-
58
- logger.info('\nENDPOINTS DISPONIBLES (cargados desde routes.json):');
59
- logger.info('GET /api/users - Obtener todos los usuarios (JWT req)');
60
- logger.info('GET /api/users/:id - Obtener usuario por ID (JWT req)');
61
- logger.info('POST /api/users - Crear usuario (API Key req)');
62
- logger.info('GET /api/products - Obtener productos (sin auth)');
63
- logger.info('PUT /api/products/:id - Actualizar producto (API Key req)');
64
-
65
- logger.info('\nEJEMPLOS DE USO:');
66
- logger.info('# Obtener productos (sin autenticación):');
67
- logger.info('curl -X GET http://localhost:6000/api/products');
68
-
69
- logger.info('\nEl servidor se detendrá automáticamente en 120 segundos...');
70
-
71
- // Programar apagado automático para la demostración
72
- setTimeout(() => {
73
- logger.info('Finalizando ejemplo...');
74
- httpServer.close(() => {
75
- logger.info('Servidor detenido. Ejemplo completado.');
76
- console.log('\nEjemplo real completado exitosamente!');
77
- console.log('El framework JERK ha demostrado su capacidad para:');
78
- console.log(' - Cargar rutas dinámicamente desde archivos JSON');
79
- console.log(' - Usar controladores definidos externamente');
80
- console.log(' - Aplicar diferentes tipos de autenticación');
81
- process.exit(0);
82
- });
83
- }, 120000);
84
-
85
- })
86
- .catch(error => {
87
- process.chdir(originalCwd); // Asegurarse de restaurar el directorio en caso de error
88
- logger.error('Error cargando rutas:', error.message);
89
- process.exit(1);
90
- });
91
-
92
- // Mantener el proceso activo
93
- process.stdin.resume();
@@ -1,85 +0,0 @@
1
- /**
2
- * Controlador de ejemplo para usuarios
3
- * Archivo: examples/basic/controllers/userController.js
4
- */
5
-
6
- // Simulación de base de datos
7
- let users = [
8
- { id: 1, name: 'John Doe', email: 'john@example.com' },
9
- { id: 2, name: 'Jane Smith', email: 'jane@example.com' }
10
- ];
11
-
12
- // Obtener todos los usuarios
13
- function getUsers(req, res) {
14
- res.writeHead(200, { 'Content-Type': 'application/json' });
15
- res.end(JSON.stringify({
16
- success: true,
17
- data: users
18
- }));
19
- }
20
-
21
- // Obtener un usuario por ID
22
- function getUserById(req, res) {
23
- const userId = parseInt(req.params.id);
24
- const user = users.find(u => u.id === userId);
25
-
26
- if (!user) {
27
- res.writeHead(404, { 'Content-Type': 'application/json' });
28
- res.end(JSON.stringify({
29
- success: false,
30
- message: 'Usuario no encontrado'
31
- }));
32
- return;
33
- }
34
-
35
- res.writeHead(200, { 'Content-Type': 'application/json' });
36
- res.end(JSON.stringify({
37
- success: true,
38
- data: user
39
- }));
40
- }
41
-
42
- // Crear un nuevo usuario
43
- function createUser(req, res) {
44
- try {
45
- const { name, email } = req.body;
46
-
47
- // Validar datos
48
- if (!name || !email) {
49
- res.writeHead(400, { 'Content-Type': 'application/json' });
50
- res.end(JSON.stringify({
51
- success: false,
52
- message: 'Nombre y correo electrónico son requeridos'
53
- }));
54
- return;
55
- }
56
-
57
- // Crear nuevo usuario
58
- const newUser = {
59
- id: users.length + 1,
60
- name,
61
- email
62
- };
63
-
64
- users.push(newUser);
65
-
66
- res.writeHead(201, { 'Content-Type': 'application/json' });
67
- res.end(JSON.stringify({
68
- success: true,
69
- data: newUser
70
- }));
71
- } catch (error) {
72
- res.writeHead(500, { 'Content-Type': 'application/json' });
73
- res.end(JSON.stringify({
74
- success: false,
75
- message: 'Error al crear usuario'
76
- }));
77
- }
78
- }
79
-
80
- // Exportar handlers
81
- module.exports = {
82
- getUsers,
83
- getUserById,
84
- createUser
85
- };
@@ -1,72 +0,0 @@
1
- /**
2
- * Ejemplo basico de uso del framework JERK
3
- * Este script demuestra cómo usar directamente los controladores
4
- */
5
-
6
- const { JERK, Logger } = require('../index');
7
- const userController = require('./basic/controllers/userController');
8
-
9
- // Crear instancia del logger
10
- const logger = new Logger({ level: 'info', timestamp: true });
11
-
12
- logger.info('Iniciando ejemplo basico con controladores');
13
-
14
- // Crear instancia del servidor
15
- const server = new JERK({
16
- port: 6001,
17
- host: 'localhost'
18
- });
19
-
20
- // Middleware de logging
21
- server.use((req, res, next) => {
22
- logger.info(`${req.method} ${req.url}`);
23
- next();
24
- });
25
-
26
- // Usar los handlers directamente desde el controlador
27
- server.addRoute('GET', '/api/users', userController.getUsers);
28
- server.addRoute('GET', '/api/users/:id', userController.getUserById);
29
- server.addRoute('POST', '/api/users', userController.createUser);
30
-
31
- logger.info('Agregando rutas usando handlers del controlador userController');
32
-
33
- logger.info('\nIniciando servidor en http://localhost:6001');
34
-
35
- // Iniciar el servidor
36
- const httpServer = server.start();
37
-
38
- logger.info('\nENDPOINTS DISPONIBLES:');
39
- logger.info('GET /api/users - Obtener todos los usuarios');
40
- logger.info('GET /api/users/:id - Obtener usuario por ID');
41
- logger.info('POST /api/users - Crear nuevo usuario');
42
-
43
- logger.info('\nEJEMPLOS DE USO:');
44
- logger.info('# Obtener todos los usuarios:');
45
- logger.info('curl -X GET http://localhost:6001/api/users');
46
- logger.info('');
47
- logger.info('# Obtener usuario por ID:');
48
- logger.info('curl -X GET http://localhost:6001/api/users/1');
49
- logger.info('');
50
- logger.info('# Crear nuevo usuario:');
51
- logger.info('curl -X POST -H "Content-Type: application/json" \\');
52
- logger.info(' -d \'{"name":"Juan Perez", "email":"juan@example.com"}\' \\');
53
- logger.info(' http://localhost:6001/api/users');
54
-
55
- logger.info('\nEl servidor se detendrá automáticamente en 60 segundos...');
56
-
57
- // Programar apagado automático para la demostración
58
- setTimeout(() => {
59
- logger.info('Finalizando ejemplo basico...');
60
- httpServer.close(() => {
61
- logger.info('Servidor detenido. Ejemplo basico completado.');
62
- console.log('\nEjemplo basico completado exitosamente!');
63
- console.log('El framework JERK ha demostrado su capacidad para:');
64
- console.log(' - Usar controladores directamente');
65
- console.log(' - Manejar rutas parametrizadas');
66
- console.log(' - Procesar solicitudes POST con cuerpo JSON');
67
- process.exit(0);
68
- });
69
- }, 60000);
70
-
71
- // Mantener el proceso activo
72
- process.stdin.resume();
@@ -1,71 +0,0 @@
1
- # Ejemplo Frontend con JERK JS
2
-
3
- Este ejemplo demuestra cómo el Framework JERK JS puede utilizarse para servir tanto APIs como contenido HTML para frontends, gracias a la nueva funcionalidad de especificación de content-type en el archivo routes.json.
4
-
5
- ## Características
6
-
7
- - API REST y páginas HTML en el mismo servidor
8
- - Especificación de content-type en routes.json
9
- - Soporte para diferentes tipos de contenido (HTML, CSS, JavaScript, JSON)
10
- - Frontend completamente funcional con estilos y scripts
11
- - Navegación entre páginas HTML
12
-
13
- ## Configuración
14
-
15
- 1. Asegúrate de tener instaladas las dependencias del framework JERK
16
- 2. No se requiere configuración adicional para este ejemplo
17
-
18
- ## Uso
19
-
20
- 1. Inicia el servidor:
21
- ```bash
22
- node app.js
23
- ```
24
-
25
- 2. El servidor escuchará en `http://localhost:8082`
26
-
27
- ## Endpoints
28
-
29
- - `GET /` - Página de inicio HTML
30
- - `GET /about` - Página Acerca de HTML
31
- - `GET /contact` - Formulario de contacto HTML
32
- - `GET /api/users` - API JSON de usuarios
33
- - `GET /api/users/:id` - API JSON de usuario específico
34
- - `GET /styles.css` - Archivo CSS
35
- - `GET /script.js` - Archivo JavaScript
36
-
37
- ## Nueva funcionalidad: Content-Type en routes.json
38
-
39
- Este ejemplo demuestra la nueva funcionalidad que permite especificar el content-type directamente en el archivo routes.json:
40
-
41
- ```json
42
- {
43
- "path": "/",
44
- "method": "GET",
45
- "controller": "./controllers/pageController.js",
46
- "handler": "homePage",
47
- "auth": "none",
48
- "contentType": "text/html"
49
- }
50
- ```
51
-
52
- El campo `contentType` permite especificar el header Content-Type que se enviará con la respuesta, lo que permite servir diferentes tipos de contenido desde el mismo servidor.
53
-
54
- ## Estructura del proyecto
55
-
56
- ```
57
- examples/frontend/
58
- ├── app.js # Punto de entrada de la aplicación
59
- ├── routes.json # Definición de rutas con content-type
60
- ├── controllers/ # Controladores de las rutas
61
- │ ├── pageController.js # Controladores para páginas HTML
62
- │ ├── apiController.js # Controladores para endpoints API
63
- │ └── staticController.js # Controladores para recursos estáticos
64
- └── README.md
65
- ```
66
-
67
- ## Seguridad
68
-
69
- - CORS configurado para permitir solicitudes desde navegadores
70
- - No se requiere autenticación para acceder a los endpoints
71
- - El framework incluye protección WAF por defecto
@@ -1,71 +0,0 @@
1
- const {
2
- APIServer,
3
- RouteLoader,
4
- Logger,
5
- Cors,
6
- SessionManager
7
- } = require('../../index.js');
8
-
9
- async function startServer() {
10
- // Crear instancia del servidor
11
- const server = new APIServer({
12
- port: 8082,
13
- host: 'localhost'
14
- });
15
-
16
- // Crear instancia del logger
17
- const logger = new Logger({ level: 'info' });
18
-
19
- try {
20
- // Crear instancia del administrador de sesiones
21
- const sessionManager = new SessionManager({
22
- cookieName: 'frontend_session',
23
- secret: 'frontend-session-secret-change-in-production',
24
- timeout: 3600000 // 1 hora
25
- });
26
-
27
- // Aplicar middleware de sesión
28
- server.use(sessionManager.middleware());
29
-
30
- // Hacer que sessionManager esté disponible en el servidor para el RouteLoader
31
- server.sessionManager = sessionManager;
32
-
33
- // Configurar CORS para permitir solicitudes desde navegadores
34
- const cors = new Cors({
35
- origin: '*',
36
- methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
37
- allowedHeaders: [
38
- 'Content-Type',
39
- 'Authorization',
40
- 'X-Requested-With',
41
- 'Accept',
42
- 'Origin'
43
- ]
44
- });
45
-
46
- // Aplicar middleware de CORS
47
- server.use(cors.middleware());
48
-
49
- // Cargar rutas desde archivo JSON
50
- const routeLoader = new RouteLoader();
51
- await routeLoader.loadRoutes(server, './routes.json');
52
-
53
- // Iniciar el servidor
54
- server.start();
55
-
56
- logger.info('Servidor frontend iniciado en http://localhost:8082');
57
- logger.info('Endpoints disponibles:');
58
- logger.info('- GET / (Página de inicio HTML)');
59
- logger.info('- GET /about (Página Acerca de HTML)');
60
- logger.info('- GET /api/users (API JSON)');
61
- logger.info('- GET /contact (Formulario de contacto HTML)');
62
- } catch (error) {
63
- logger.error('Error iniciando el servidor:', error.message);
64
- process.exit(1);
65
- }
66
- }
67
-
68
- // Iniciar el servidor
69
- startServer();
70
-
71
- module.exports = { startServer };
@@ -1,39 +0,0 @@
1
- // Simulación de base de datos en memoria
2
- const users = [
3
- { id: 1, name: 'Juan Pérez', email: 'juan@example.com', age: 30 },
4
- { id: 2, name: 'María García', email: 'maria@example.com', age: 25 },
5
- { id: 3, name: 'Pedro Rodríguez', email: 'pedro@example.com', age: 35 }
6
- ];
7
-
8
- const apiController = {
9
- getUsers: (req, res) => {
10
- res.writeHead(200);
11
- res.end(JSON.stringify({
12
- success: true,
13
- data: users,
14
- count: users.length
15
- }));
16
- },
17
-
18
- getUserById: (req, res) => {
19
- const userId = parseInt(req.params.id);
20
- const user = users.find(u => u.id === userId);
21
-
22
- if (!user) {
23
- res.writeHead(404);
24
- res.end(JSON.stringify({
25
- success: false,
26
- error: 'Usuario no encontrado'
27
- }));
28
- return;
29
- }
30
-
31
- res.writeHead(200);
32
- res.end(JSON.stringify({
33
- success: true,
34
- data: user
35
- }));
36
- }
37
- };
38
-
39
- module.exports = apiController;