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.
- package/CHANGELOG.md +3 -2
- package/README.md +1 -1
- package/examples.arj +0 -0
- package/index.js +1 -1
- package/lib/middleware/compressor.js +34 -18
- package/package.json +1 -1
- package/standard/CompressionTestController.js +38 -0
- package/standard/HealthController.js +16 -0
- package/standard/HomeController.js +12 -0
- package/standard/ProductController.js +18 -0
- package/standard/README.md +47 -0
- package/standard/UserController.js +23 -0
- package/standard/package.json +22 -0
- package/standard/routes.json +58 -0
- package/standard/server.js +140 -0
- package/cookies.txt +0 -5
- package/examples/advanced/controllers/productController.js +0 -64
- package/examples/advanced/controllers/userController.js +0 -85
- package/examples/advanced/routes.json +0 -51
- package/examples/advanced_example.js +0 -93
- package/examples/basic/controllers/userController.js +0 -85
- package/examples/basic_example.js +0 -72
- package/examples/frontend/README.md +0 -71
- package/examples/frontend/app.js +0 -71
- package/examples/frontend/controllers/apiController.js +0 -39
- package/examples/frontend/controllers/authController.js +0 -220
- package/examples/frontend/controllers/formController.js +0 -47
- package/examples/frontend/controllers/messageController.js +0 -96
- package/examples/frontend/controllers/pageController.js +0 -178
- package/examples/frontend/controllers/staticController.js +0 -167
- package/examples/frontend/routes.json +0 -90
- package/examples/hooks/app.js +0 -136
- package/examples/hooks/controllers/authController.js +0 -54
- package/examples/hooks/controllers/mainController.js +0 -41
- package/examples/hooks/controllers/productController.js +0 -39
- package/examples/hooks/controllers/userController.js +0 -69
- package/examples/hooks/routes.json +0 -51
- package/examples/hooks/views/home.html +0 -50
- package/examples/mvc_example/app.js +0 -138
- package/examples/mvc_example/views/home/index.html +0 -26
- package/examples/mvc_example/views/home/simple.html +0 -3
- package/examples/mvc_example/views/layout.html +0 -23
- package/examples/mvc_example/views/test.html +0 -3
- package/examples/mvc_example/views/user/invalid.html +0 -6
- package/examples/mvc_example/views/user/list.html +0 -36
- package/examples/mvc_example/views/user/notfound.html +0 -6
- package/examples/mvc_example/views/user/profile.html +0 -11
- package/examples/mvc_routes_example/app.js +0 -34
- package/examples/mvc_routes_example/controllers/mainController.js +0 -27
- package/examples/mvc_routes_example/controllers/productController.js +0 -47
- package/examples/mvc_routes_example/controllers/userController.js +0 -76
- package/examples/mvc_routes_example/routes.json +0 -30
- package/examples/mvc_routes_example/views/layout.html +0 -31
- package/examples/mvc_routes_example/views/main/index.html +0 -11
- package/examples/mvc_routes_example/views/product/catalog.html +0 -24
- package/examples/mvc_routes_example/views/user/invalid.html +0 -6
- package/examples/mvc_routes_example/views/user/list.html +0 -40
- package/examples/mvc_routes_example/views/user/notfound.html +0 -6
- package/examples/mvc_routes_example/views/user/profile.html +0 -18
- package/examples/mvc_welcome/README.md +0 -34
- package/examples/mvc_welcome/app.js +0 -50
- package/examples/mvc_welcome/controllers/welcomeController.js +0 -41
- package/examples/mvc_welcome/package.json +0 -26
- package/examples/mvc_welcome/views/home/welcome.html +0 -82
- package/examples/performance_demo/app.js +0 -172
- package/examples/performance_demo_with_hooks/README.md +0 -52
- package/examples/performance_demo_with_hooks/app.js +0 -290
- package/examples/public/README.md +0 -92
- package/examples/public/app.js +0 -72
- package/examples/public/controllers/healthController.js +0 -20
- package/examples/public/controllers/mainController.js +0 -22
- package/examples/public/controllers/userController.js +0 -139
- package/examples/public/routes.json +0 -51
- package/examples/v2/README.md +0 -72
- package/examples/v2/app.js +0 -74
- package/examples/v2/app_fixed.js +0 -74
- package/examples/v2/controllers/authController.js +0 -64
- package/examples/v2/controllers/mainController.js +0 -24
- package/examples/v2/controllers/protectedController.js +0 -12
- package/examples/v2/controllers/userController.js +0 -16
- package/examples/v2/package.json +0 -27
- package/examples/v2/routes.json +0 -30
- package/examples/v2/test_api.sh +0 -47
- package/examples/v2/tokens_example.sqlite +0 -0
- package/examples/v2.1_firewall_demo/README.md +0 -113
- package/examples/v2.1_firewall_demo/app.js +0 -182
- package/examples/v2.1_firewall_demo/package.json +0 -27
- package/examples/v2.1_hooks_demo/README.md +0 -85
- package/examples/v2.1_hooks_demo/app.js +0 -101
- package/examples/v2.1_hooks_demo/controllers/hooksController.js +0 -29
- package/examples/v2.1_hooks_demo/controllers/mainController.js +0 -18
- package/examples/v2.1_hooks_demo/package.json +0 -27
- package/examples/v2.1_hooks_demo/routes.json +0 -16
- package/examples/v2.1_openapi_demo/README.md +0 -82
- package/examples/v2.1_openapi_demo/app.js +0 -296
- package/examples/v2.1_openapi_demo/package.json +0 -26
- package/examples/v2_cors/README.md +0 -82
- package/examples/v2_cors/app.js +0 -108
- package/examples/v2_cors/package.json +0 -23
- package/examples/v2_json_auth/README.md +0 -83
- package/examples/v2_json_auth/app.js +0 -72
- package/examples/v2_json_auth/controllers/authController.js +0 -67
- package/examples/v2_json_auth/controllers/mainController.js +0 -16
- package/examples/v2_json_auth/controllers/protectedController.js +0 -12
- package/examples/v2_json_auth/controllers/tokenController.js +0 -28
- package/examples/v2_json_auth/controllers/userController.js +0 -15
- package/examples/v2_json_auth/package.json +0 -26
- package/examples/v2_json_auth/routes.json +0 -37
- package/examples/v2_json_auth/tokens.json +0 -20
- package/examples/v2_mariadb_auth/README.md +0 -94
- package/examples/v2_mariadb_auth/app.js +0 -81
- package/examples/v2_mariadb_auth/controllers/authController.js +0 -95
- package/examples/v2_mariadb_auth/controllers/mainController.js +0 -31
- package/examples/v2_mariadb_auth/controllers/protectedController.js +0 -12
- package/examples/v2_mariadb_auth/controllers/userController.js +0 -17
- package/examples/v2_mariadb_auth/package.json +0 -27
- package/examples/v2_mariadb_auth/routes.json +0 -37
- package/examples/v2_no_auth/README.md +0 -75
- package/examples/v2_no_auth/app.js +0 -72
- package/examples/v2_no_auth/controllers/healthController.js +0 -14
- package/examples/v2_no_auth/controllers/mainController.js +0 -19
- package/examples/v2_no_auth/controllers/productController.js +0 -31
- package/examples/v2_no_auth/controllers/publicController.js +0 -16
- package/examples/v2_no_auth/package.json +0 -22
- package/examples/v2_no_auth/routes.json +0 -37
- package/examples/v2_oauth/README.md +0 -70
- package/examples/v2_oauth/app.js +0 -90
- package/examples/v2_oauth/controllers/mainController.js +0 -45
- package/examples/v2_oauth/controllers/oauthController.js +0 -247
- package/examples/v2_oauth/controllers/protectedController.js +0 -13
- package/examples/v2_oauth/controllers/userController.js +0 -17
- package/examples/v2_oauth/package.json +0 -26
- package/examples/v2_oauth/routes.json +0 -44
- package/examples/v2_openapi/README.md +0 -77
- package/examples/v2_openapi/app.js +0 -222
- package/examples/v2_openapi/controllers/authController.js +0 -52
- package/examples/v2_openapi/controllers/mainController.js +0 -26
- package/examples/v2_openapi/controllers/productController.js +0 -17
- package/examples/v2_openapi/controllers/userController.js +0 -27
- package/examples/v2_openapi/package.json +0 -26
- package/examples/v2_openapi/routes.json +0 -37
- package/v2examplle/v2_json_auth/README.md +0 -83
- package/v2examplle/v2_json_auth/app.js +0 -72
- package/v2examplle/v2_json_auth/controllers/authController.js +0 -67
- package/v2examplle/v2_json_auth/controllers/mainController.js +0 -16
- package/v2examplle/v2_json_auth/controllers/protectedController.js +0 -12
- package/v2examplle/v2_json_auth/controllers/tokenController.js +0 -28
- package/v2examplle/v2_json_auth/controllers/userController.js +0 -15
- package/v2examplle/v2_json_auth/package.json +0 -26
- package/v2examplle/v2_json_auth/routes.json +0 -37
- package/v2examplle/v2_json_auth/tokens.json +0 -20
- package/v2examplle/v2_mariadb_auth/README.md +0 -94
- package/v2examplle/v2_mariadb_auth/app.js +0 -81
- package/v2examplle/v2_mariadb_auth/controllers/authController.js +0 -95
- package/v2examplle/v2_mariadb_auth/controllers/mainController.js +0 -31
- package/v2examplle/v2_mariadb_auth/controllers/protectedController.js +0 -12
- package/v2examplle/v2_mariadb_auth/controllers/userController.js +0 -17
- package/v2examplle/v2_mariadb_auth/package.json +0 -27
- package/v2examplle/v2_mariadb_auth/routes.json +0 -37
- package/v2examplle/v2_sqlite_auth/README.md +0 -72
- package/v2examplle/v2_sqlite_auth/app.js +0 -74
- package/v2examplle/v2_sqlite_auth/app_fixed.js +0 -74
- package/v2examplle/v2_sqlite_auth/controllers/authController.js +0 -64
- package/v2examplle/v2_sqlite_auth/controllers/mainController.js +0 -24
- package/v2examplle/v2_sqlite_auth/controllers/protectedController.js +0 -12
- package/v2examplle/v2_sqlite_auth/controllers/userController.js +0 -16
- package/v2examplle/v2_sqlite_auth/package.json +0 -27
- package/v2examplle/v2_sqlite_auth/routes.json +0 -30
- package/v2examplle/v2_sqlite_auth/test_api.sh +0 -47
- package/v2examplle/v2_sqlite_auth/tokens_example.sqlite +0 -0
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ejemplo de página de bienvenida usando el motor de plantillas MVC de JERK
|
|
3
|
-
* Demostración del sistema MVC con vistas y controladores
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const { APIServer, Router, Logger } = require('../../index');
|
|
7
|
-
const WelcomeController = require('./controllers/welcomeController');
|
|
8
|
-
|
|
9
|
-
async function startServer() {
|
|
10
|
-
// Crear instancia del servidor
|
|
11
|
-
const server = new APIServer({
|
|
12
|
-
port: 9002,
|
|
13
|
-
host: 'localhost'
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Crear instancia del logger
|
|
17
|
-
const logger = new Logger({ level: 'info' });
|
|
18
|
-
|
|
19
|
-
// Crear instancia del controlador
|
|
20
|
-
const welcomeController = new WelcomeController({
|
|
21
|
-
viewsPath: './examples/mvc_welcome/views'
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
// Definir rutas
|
|
25
|
-
const router = new Router();
|
|
26
|
-
|
|
27
|
-
router
|
|
28
|
-
.get('/', (req, res) => {
|
|
29
|
-
welcomeController.setRequestResponse(req, res);
|
|
30
|
-
welcomeController.index(req, res);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
// Agregar las rutas del router al servidor
|
|
34
|
-
const routes = router.getRoutes();
|
|
35
|
-
for (const route of routes) {
|
|
36
|
-
server.addRoute(route.method, route.path, route.handler);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Iniciar el servidor
|
|
40
|
-
server.start(() => {
|
|
41
|
-
logger.info('Servidor de bienvenida MVC iniciado en http://localhost:9002');
|
|
42
|
-
logger.info('Ruta disponible:');
|
|
43
|
-
logger.info('- http://localhost:9002/ (Página de bienvenida)');
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Iniciar el servidor
|
|
48
|
-
startServer();
|
|
49
|
-
|
|
50
|
-
module.exports = { startServer };
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
const { ControllerBase } = require('../../../index');
|
|
2
|
-
|
|
3
|
-
class WelcomeController extends ControllerBase {
|
|
4
|
-
constructor(options = {}) {
|
|
5
|
-
super(options);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
index(req, res) {
|
|
9
|
-
// Establecer variables para la vista
|
|
10
|
-
this.set('title', 'Bienvenido a JERK Framework');
|
|
11
|
-
this.set('message', 'El poderoso framework para construir aplicaciones web completas con Node.js');
|
|
12
|
-
|
|
13
|
-
// Datos de características del framework
|
|
14
|
-
this.set('features', [
|
|
15
|
-
{
|
|
16
|
-
name: 'Motor MVC',
|
|
17
|
-
description: 'Sistema completo de vistas, controladores y modelos'
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
name: 'Seguridad',
|
|
21
|
-
description: 'Firewall integrado y protección contra ataques'
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: 'Autenticación',
|
|
25
|
-
description: 'Soporte para JWT, OAuth, sesiones y más'
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: 'Flexibilidad',
|
|
29
|
-
description: 'Arquitectura modular y altamente configurable'
|
|
30
|
-
}
|
|
31
|
-
]);
|
|
32
|
-
|
|
33
|
-
this.set('documentationUrl', 'https://jerk.page.gd/');
|
|
34
|
-
this.set('examplesUrl', 'https://gitlab.com/bytedogssyndicate1/jerk');
|
|
35
|
-
|
|
36
|
-
// Renderizar la vista
|
|
37
|
-
this.render(res, 'home/welcome');
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
module.exports = WelcomeController;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "jerk-mvc-welcome-example",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "Ejemplo de página de bienvenida usando el motor de plantillas MVC del framework JERK",
|
|
5
|
-
"main": "app.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"start": "node app.js",
|
|
8
|
-
"dev": "nodemon app.js"
|
|
9
|
-
},
|
|
10
|
-
"keywords": [
|
|
11
|
-
"jerk",
|
|
12
|
-
"mvc",
|
|
13
|
-
"template-engine",
|
|
14
|
-
"welcome-page",
|
|
15
|
-
"nodejs",
|
|
16
|
-
"framework"
|
|
17
|
-
],
|
|
18
|
-
"author": "JERK Framework Team",
|
|
19
|
-
"license": "Apache-2.0",
|
|
20
|
-
"dependencies": {
|
|
21
|
-
"jerkjs": "^2.0.0"
|
|
22
|
-
},
|
|
23
|
-
"devDependencies": {
|
|
24
|
-
"nodemon": "^3.0.0"
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="es">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>{{title}}</title>
|
|
7
|
-
<style>
|
|
8
|
-
body {
|
|
9
|
-
font-family: Arial, sans-serif;
|
|
10
|
-
margin: 0;
|
|
11
|
-
padding: 0;
|
|
12
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
13
|
-
min-height: 100vh;
|
|
14
|
-
display: flex;
|
|
15
|
-
align-items: center;
|
|
16
|
-
justify-content: center;
|
|
17
|
-
}
|
|
18
|
-
.container {
|
|
19
|
-
background: white;
|
|
20
|
-
padding: 2rem;
|
|
21
|
-
border-radius: 10px;
|
|
22
|
-
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
|
|
23
|
-
text-align: center;
|
|
24
|
-
max-width: 600px;
|
|
25
|
-
width: 90%;
|
|
26
|
-
}
|
|
27
|
-
h1 {
|
|
28
|
-
color: #333;
|
|
29
|
-
margin-bottom: 1rem;
|
|
30
|
-
}
|
|
31
|
-
.message {
|
|
32
|
-
font-size: 1.2rem;
|
|
33
|
-
color: #666;
|
|
34
|
-
margin-bottom: 2rem;
|
|
35
|
-
}
|
|
36
|
-
.features {
|
|
37
|
-
display: grid;
|
|
38
|
-
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
39
|
-
gap: 1rem;
|
|
40
|
-
margin: 2rem 0;
|
|
41
|
-
}
|
|
42
|
-
.feature {
|
|
43
|
-
background: #f8f9fa;
|
|
44
|
-
padding: 1rem;
|
|
45
|
-
border-radius: 5px;
|
|
46
|
-
border-left: 4px solid #667eea;
|
|
47
|
-
}
|
|
48
|
-
.btn {
|
|
49
|
-
display: inline-block;
|
|
50
|
-
background: #667eea;
|
|
51
|
-
color: white;
|
|
52
|
-
padding: 0.75rem 1.5rem;
|
|
53
|
-
text-decoration: none;
|
|
54
|
-
border-radius: 5px;
|
|
55
|
-
margin-top: 1rem;
|
|
56
|
-
transition: background 0.3s;
|
|
57
|
-
}
|
|
58
|
-
.btn:hover {
|
|
59
|
-
background: #5a6fd8;
|
|
60
|
-
}
|
|
61
|
-
</style>
|
|
62
|
-
</head>
|
|
63
|
-
<body>
|
|
64
|
-
<div class="container">
|
|
65
|
-
<h1>{{title}}</h1>
|
|
66
|
-
<div class="message">{{message}}</div>
|
|
67
|
-
|
|
68
|
-
<div class="features">
|
|
69
|
-
{{foreach:features}}
|
|
70
|
-
<div class="feature">
|
|
71
|
-
<h3>{{item.name}}</h3>
|
|
72
|
-
<p>{{item.description}}</p>
|
|
73
|
-
</div>
|
|
74
|
-
{{endforeach}}
|
|
75
|
-
</div>
|
|
76
|
-
|
|
77
|
-
<p>¡Comienza a construir tu aplicación con JERK!</p>
|
|
78
|
-
<a href="{{documentationUrl}}" class="btn">Documentación</a>
|
|
79
|
-
<a href="{{examplesUrl}}" class="btn">Ejemplos</a>
|
|
80
|
-
</div>
|
|
81
|
-
</body>
|
|
82
|
-
</html>
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
const Jerk = require('../../index.js');
|
|
2
|
-
|
|
3
|
-
// Crear instancia del servidor con configuraciones de rendimiento
|
|
4
|
-
const app = new Jerk({
|
|
5
|
-
port: 3000,
|
|
6
|
-
host: 'localhost',
|
|
7
|
-
enableCompression: true, // Habilitar compresión
|
|
8
|
-
maxBodySize: '50mb', // Permitir bodies extensos
|
|
9
|
-
enableNestedRoutes: true // Habilitar rutas anidadas
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
// Middleware de compresión
|
|
13
|
-
app.use(require('../../lib/middleware/compressor')());
|
|
14
|
-
|
|
15
|
-
// Ruta para probar compresión con respuesta grande
|
|
16
|
-
app.get('/api/compression-test', (req, res) => {
|
|
17
|
-
// Generar una respuesta grande para demostrar compresión
|
|
18
|
-
const largeData = {
|
|
19
|
-
message: 'Esta es una respuesta grande para demostrar compresión',
|
|
20
|
-
data: Array.from({ length: 1000 }, (_, i) => ({
|
|
21
|
-
id: i,
|
|
22
|
-
title: `Item ${i}`,
|
|
23
|
-
description: `Este es un elemento de prueba número ${i} con información detallada`,
|
|
24
|
-
metadata: {
|
|
25
|
-
created: new Date().toISOString(),
|
|
26
|
-
category: `categoria-${i % 10}`,
|
|
27
|
-
tags: [`tag${i % 5}`, `etiqueta${i % 7}`]
|
|
28
|
-
}
|
|
29
|
-
}))
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
res.json(largeData);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
// Ruta para probar bodies extensos
|
|
36
|
-
app.post('/api/large-body', (req, res) => {
|
|
37
|
-
const bodySize = JSON.stringify(req.body).length;
|
|
38
|
-
|
|
39
|
-
res.json({
|
|
40
|
-
message: 'Body recibido exitosamente',
|
|
41
|
-
size: bodySize,
|
|
42
|
-
status: 'success'
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
// Rutas anidadas para demostrar jerarquía
|
|
47
|
-
app.get('/api/users/:userId/posts', (req, res) => {
|
|
48
|
-
const { userId } = req.params;
|
|
49
|
-
|
|
50
|
-
res.json({
|
|
51
|
-
message: `Posts del usuario ${userId}`,
|
|
52
|
-
posts: Array.from({ length: 5 }, (_, i) => ({
|
|
53
|
-
id: i + 1,
|
|
54
|
-
title: `Post ${i + 1} de usuario ${userId}`,
|
|
55
|
-
content: 'Contenido del post...'
|
|
56
|
-
}))
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
app.get('/api/users/:userId/posts/:postId/comments', (req, res) => {
|
|
61
|
-
const { userId, postId } = req.params;
|
|
62
|
-
|
|
63
|
-
res.json({
|
|
64
|
-
message: `Comentarios del post ${postId} del usuario ${userId}`,
|
|
65
|
-
comments: Array.from({ length: 3 }, (_, i) => ({
|
|
66
|
-
id: i + 1,
|
|
67
|
-
author: `Usuario${i + 1}`,
|
|
68
|
-
content: `Comentario ${i + 1} en el post ${postId}`
|
|
69
|
-
}))
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
// Ruta para probar diferentes tipos de payloads grandes
|
|
74
|
-
app.post('/api/upload-large-data', (req, res) => {
|
|
75
|
-
const { dataType, dataSize } = req.body || {};
|
|
76
|
-
|
|
77
|
-
let response;
|
|
78
|
-
switch(dataType) {
|
|
79
|
-
case 'text':
|
|
80
|
-
response = {
|
|
81
|
-
type: 'text',
|
|
82
|
-
content: 'x'.repeat(dataSize || 10000),
|
|
83
|
-
message: 'Texto largo generado para pruebas de compresión'
|
|
84
|
-
};
|
|
85
|
-
break;
|
|
86
|
-
case 'json':
|
|
87
|
-
response = {
|
|
88
|
-
type: 'json',
|
|
89
|
-
data: Array.from({ length: dataSize || 1000 }, (_, i) => ({
|
|
90
|
-
id: i,
|
|
91
|
-
value: Math.random(),
|
|
92
|
-
label: `Elemento ${i}`
|
|
93
|
-
})),
|
|
94
|
-
message: 'JSON grande generado para pruebas de compresión'
|
|
95
|
-
};
|
|
96
|
-
break;
|
|
97
|
-
default:
|
|
98
|
-
response = {
|
|
99
|
-
type: 'default',
|
|
100
|
-
message: 'Tipo de dato no especificado, usando valores por defecto',
|
|
101
|
-
sample: Array(100).fill().map((_, i) => `dato_${i}`)
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
res.json(response);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
// Endpoint para medir tiempo de respuesta
|
|
109
|
-
app.get('/api/performance-test', (req, res) => {
|
|
110
|
-
const startTime = Date.now();
|
|
111
|
-
|
|
112
|
-
// Simular procesamiento intensivo
|
|
113
|
-
const processData = () => {
|
|
114
|
-
return Array.from({ length: 50000 }, (_, i) => ({
|
|
115
|
-
id: i,
|
|
116
|
-
computedValue: Math.sqrt(i) * Math.sin(i),
|
|
117
|
-
timestamp: Date.now()
|
|
118
|
-
}));
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
const processedData = processData();
|
|
122
|
-
const endTime = Date.now();
|
|
123
|
-
|
|
124
|
-
res.json({
|
|
125
|
-
message: 'Prueba de rendimiento completada',
|
|
126
|
-
processingTime: endTime - startTime,
|
|
127
|
-
dataSize: processedData.length,
|
|
128
|
-
status: 'success'
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
// Ruta raíz para instrucciones
|
|
133
|
-
app.get('/', (req, res) => {
|
|
134
|
-
res.send(`
|
|
135
|
-
<html>
|
|
136
|
-
<head><title>Demo de Rendimiento - JERK Framework</title></head>
|
|
137
|
-
<body>
|
|
138
|
-
<h1>Demo de Rendimiento - JERK Framework</h1>
|
|
139
|
-
<p>Esta demostración muestra las capacidades de rendimiento del framework:</p>
|
|
140
|
-
<ul>
|
|
141
|
-
<li><strong>Compresión</strong>: <a href="/api/compression-test">/api/compression-test</a> - Respuesta grande comprimida</li>
|
|
142
|
-
<li><strong>Body Extensos</strong>: POST a <code>/api/large-body</code> con grandes cantidades de datos</li>
|
|
143
|
-
<li><strong>Rutas Anidadas</strong>:
|
|
144
|
-
<ul>
|
|
145
|
-
<li><a href="/api/users/123/posts">/api/users/:userId/posts</a></li>
|
|
146
|
-
<li><a href="/api/users/123/posts/456/comments">/api/users/:userId/posts/:postId/comments</a></li>
|
|
147
|
-
</ul>
|
|
148
|
-
</li>
|
|
149
|
-
<li><strong>Upload de Datos Grandes</strong>: POST a <code>/api/upload-large-data</code> con diferentes tipos de datos</li>
|
|
150
|
-
<li><strong>Prueba de Rendimiento</strong>: <a href="/api/performance-test">/api/performance-test</a> - Medición de tiempo de procesamiento</li>
|
|
151
|
-
</ul>
|
|
152
|
-
<p>Para probar bodies extensos, usa curl o Postman para hacer POST requests a los endpoints correspondientes.</p>
|
|
153
|
-
</body>
|
|
154
|
-
</html>
|
|
155
|
-
`);
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
// Iniciar el servidor
|
|
159
|
-
app.listen(() => {
|
|
160
|
-
console.log('Demo de rendimiento iniciado en http://localhost:3000');
|
|
161
|
-
console.log('Endpoints disponibles:');
|
|
162
|
-
console.log(' GET /api/compression-test - Demo de compresión');
|
|
163
|
-
console.log(' POST /api/large-body - Demo de bodies extensos');
|
|
164
|
-
console.log(' GET /api/users/:userId/posts - Demo de rutas anidadas');
|
|
165
|
-
console.log(' GET /api/users/:userId/posts/:postId/comments - Demo de rutas anidadas profundas');
|
|
166
|
-
console.log(' POST /api/upload-large-data - Demo de carga de datos grandes');
|
|
167
|
-
console.log(' GET /api/performance-test - Demo de rendimiento');
|
|
168
|
-
console.log('');
|
|
169
|
-
console.log('Visita http://localhost:3000 para ver la página principal');
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
module.exports = app;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Demo de Rendimiento - JERK Framework
|
|
2
|
-
|
|
3
|
-
Este demostración muestra las capacidades de rendimiento del framework JERK, incluyendo:
|
|
4
|
-
|
|
5
|
-
## Características
|
|
6
|
-
|
|
7
|
-
- **Compresión de respuestas**: El servidor comprime automáticamente las respuestas grandes para mejorar el rendimiento.
|
|
8
|
-
- **Soporte para bodies extensos**: Capacidad para manejar payloads grandes en requests POST.
|
|
9
|
-
- **Rutas anidadas**: Soporte para rutas jerárquicas complejas.
|
|
10
|
-
- **Verificación de puerto**: El servidor encuentra automáticamente un puerto disponible para evitar conflictos.
|
|
11
|
-
- **Visualización de rutas**: Lista interactiva de todas las rutas disponibles usando hooks.
|
|
12
|
-
|
|
13
|
-
## Endpoints
|
|
14
|
-
|
|
15
|
-
### Compresión
|
|
16
|
-
- `GET /api/compression-test` - Retorna una respuesta grande para demostrar compresión
|
|
17
|
-
|
|
18
|
-
### Bodies Extensos
|
|
19
|
-
- `POST /api/large-body` - Acepta grandes cantidades de datos en el body
|
|
20
|
-
|
|
21
|
-
### Rutas Anidadas
|
|
22
|
-
- `GET /api/users/:userId/posts` - Posts de un usuario específico
|
|
23
|
-
- `GET /api/users/:userId/posts/:postId/comments` - Comentarios de un post específico
|
|
24
|
-
|
|
25
|
-
### Otros Endpoints
|
|
26
|
-
- `POST /api/upload-large-data` - Prueba de carga de datos grandes con diferentes tipos
|
|
27
|
-
- `GET /api/performance-test` - Medición de tiempo de procesamiento
|
|
28
|
-
- `GET /` - Página principal con instrucciones
|
|
29
|
-
- `GET /routes` - Lista interactiva de todas las rutas disponibles
|
|
30
|
-
|
|
31
|
-
## Cómo Ejecutar
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
cd examples/performance_demo_with_hooks
|
|
35
|
-
node app.js
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
El servidor se iniciará en un puerto disponible entre 3000 y 3100, y mostrará el puerto asignado en la consola.
|
|
39
|
-
|
|
40
|
-
## Pruebas
|
|
41
|
-
|
|
42
|
-
Para probar la compresión, visita `/api/compression-test` y observa cómo se envía una respuesta grande de manera eficiente.
|
|
43
|
-
|
|
44
|
-
Para probar bodies extensos, puedes usar curl:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
curl -X POST http://localhost:[PUERTO]/api/large-body \
|
|
48
|
-
-H "Content-Type: application/json" \
|
|
49
|
-
-d '{"data": "'"$(printf 'x%.0s' {1..10000})"'"}'
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Para ver todas las rutas disponibles, visita `/routes` en tu navegador.
|