jerkjs 2.2.0 → 2.3.0
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 +26 -0
- package/LICENSE +201 -0
- package/README.md +4 -1
- package/README_EN.md +230 -0
- package/README_PT.md +230 -0
- package/docs/ARQUITECTURA_ROUTES.md +186 -0
- package/docs/EXTENSION_MANUAL.md +955 -0
- package/docs/FIREWALL_MANUAL.md +416 -0
- package/docs/HOOK-2.0.md +512 -0
- package/docs/HOOKS_REFERENCE_IMPROVED.md +596 -0
- package/docs/JERK_FRAMEWORK_DIAGRAM.txt +492 -0
- package/docs/JERK_FRAMEWORK_DIAGRAM_MERMAID.mmd +124 -0
- package/docs/JERK_FRAMEWORK_DOCUMENTATION.md +553 -0
- package/docs/JERK_MODELOS_HOWTO.md +566 -0
- package/docs/MANUAL_API_SDK.md +536 -0
- package/docs/MARIADB_TOKENS_IMPLEMENTATION.md +110 -0
- package/docs/MIDDLEWARE_MANUAL.md +518 -0
- package/docs/OAUTH2_GOOGLE_MANUAL.md +405 -0
- package/docs/ROUTING_WITHOUT_JSON_GUIDE.md +454 -0
- package/docs/frontend-and-sessions.md +353 -0
- package/docs/guia_inicio_rapido_jerkjs.md +113 -0
- package/examples/examples.arj +0 -0
- package/index.js +12 -1
- package/jerk-qbuilder/CHANGELOG.md +71 -0
- package/jerk-qbuilder/HOWTO.md +325 -0
- package/jerk-qbuilder/README.md +52 -0
- package/lib/mvc/controllerBase.js +31 -14
- package/lib/query/MariaDBAdapter.js +78 -0
- package/lib/query/consoleAdapter.js +184 -0
- package/lib/query/queryBuilder.js +953 -0
- package/lib/query/queryBuilderHooks.js +455 -0
- package/lib/query/queryBuilderMiddleware.js +332 -0
- package/package.json +2 -2
- package/utils/find_file_path.sh +36 -0
package/README_PT.md
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# JERK Framework v2.3.0
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
**Novo no JERK? Comece seu projeto rapidamente com nosso Kit Inicial**
|
|
6
|
+
|
|
7
|
+
Nosso Kit Inicial em `@standard/server.js` é a forma mais rápida de começar com o JERK. Ele vem com todas as funcionalidades do framework já configuradas, permitindo que você se concentre em desenvolver sua aplicação em vez de configurar infraestrutura.
|
|
8
|
+
|
|
9
|
+
**Recursos do Kit Inicial:**
|
|
10
|
+
- Configuração pronta para uso com todos os componentes principais
|
|
11
|
+
- Carregamento de rotas a partir de arquivo JSON (`routes.json`)
|
|
12
|
+
- Sistema de controladores pré-configurado
|
|
13
|
+
- Middlewares essenciais já integrados (autenticação, CORS, compressão, firewall, etc.)
|
|
14
|
+
- Sistema de logging e tratamento de erros implementado
|
|
15
|
+
|
|
16
|
+
**Como começar:**
|
|
17
|
+
1. Edite o arquivo `routes.json` para definir suas rotas e associá-las aos seus controladores
|
|
18
|
+
|
|
19
|
+
Exemplo básico de `routes.json`:
|
|
20
|
+
```json
|
|
21
|
+
[
|
|
22
|
+
{
|
|
23
|
+
"path": "/",
|
|
24
|
+
"method": "GET",
|
|
25
|
+
"controller": "HomeController",
|
|
26
|
+
"handler": "index",
|
|
27
|
+
"contentType": "text/html"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "/api/users",
|
|
31
|
+
"method": "GET",
|
|
32
|
+
"controller": "UserController",
|
|
33
|
+
"handler": "getAllUsers",
|
|
34
|
+
"contentType": "application/json"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. Crie seus controladores de acordo com as rotas definidas
|
|
40
|
+
|
|
41
|
+
Por exemplo, para a rota principal "/", crie um arquivo `HomeController.js`:
|
|
42
|
+
```javascript
|
|
43
|
+
class HomeController {
|
|
44
|
+
index(req, res) {
|
|
45
|
+
res.render('index.html', { data: 'Olá' });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
module.exports = new HomeController();
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
3. Sua aplicação está pronta para usar!
|
|
53
|
+
|
|
54
|
+
O Kit Inicial inclui controladores de exemplo para que você possa ver como o sistema funciona.
|
|
55
|
+
|
|
56
|
+
Visite nosso site: https://jerk.page.gd/
|
|
57
|
+
Repositório oficial: https://gitlab.com/bytedogssyndicate1/jerk/
|
|
58
|
+
|
|
59
|
+
## Recursos
|
|
60
|
+
|
|
61
|
+
- **Arquitetura Modular**: Componentes independentes para maior flexibilidade
|
|
62
|
+
- **Segurança Avançada**: Firewall integrado (WAF) com detecção de ataques
|
|
63
|
+
- **Sistema de Hooks**: Semelhante ao sistema do WordPress para extensibilidade
|
|
64
|
+
- **Autenticação Flexível**: Suporte para JWT, API Keys, Basic Auth, OAuth2, OpenID Connect
|
|
65
|
+
- **Armazenamento de Tokens**: Suporte para memória, JSON, SQLite e MariaDB
|
|
66
|
+
- **Roteamento Avançado**: Suporte para rotas parametrizadas e aninhadas
|
|
67
|
+
- **Suporte para Frontend**: Capacidade de servir conteúdo HTML e outros tipos de conteúdo
|
|
68
|
+
- **Configuração de Content-Type**: Especificação de cabeçalhos Content-Type em routes.json
|
|
69
|
+
- **Middlewares Integrados**: CORS, limitação de taxa, compressão, firewall, etc.
|
|
70
|
+
- **Gerenciamento de Controladores**: Carregamento dinâmico de controladores a partir de arquivos
|
|
71
|
+
- **Carregamento de Rotas**: Definição de rotas a partir de arquivos JSON
|
|
72
|
+
- **Sistema de Sessões**: Gerenciamento completo de sessões com suporte para autenticação
|
|
73
|
+
- **Mecanismo de Templates MVC**: Sistema profissional de visualização com suporte para filtros, helpers e hooks
|
|
74
|
+
- **Extensibilidade**: Sistema de hooks e filtros para personalização
|
|
75
|
+
|
|
76
|
+
## Instalação
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm install jerkjs
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Uso Básico
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
const { APIServer, Router, Logger } = require('jerkjs');
|
|
86
|
+
|
|
87
|
+
// Criar instância do servidor
|
|
88
|
+
const server = new APIServer({
|
|
89
|
+
port: 3000,
|
|
90
|
+
host: 'localhost'
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Criar instância do logger
|
|
94
|
+
const logger = new Logger({ level: 'info' });
|
|
95
|
+
|
|
96
|
+
// Definir rotas
|
|
97
|
+
server.addRoute('GET', '/', (req, res) => {
|
|
98
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
99
|
+
res.end(JSON.stringify({ message: 'Olá Mundo!' }));
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Iniciar o servidor
|
|
103
|
+
server.start();
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Componentes Principais
|
|
107
|
+
|
|
108
|
+
### APIServer
|
|
109
|
+
Servidor HTTP/HTTPS básico com suporte para rotas parametrizadas, middlewares e configuração avançada.
|
|
110
|
+
|
|
111
|
+
### Router
|
|
112
|
+
Sistema de roteamento avançado com suporte para rotas aninhadas e prefixos.
|
|
113
|
+
|
|
114
|
+
### Authenticator
|
|
115
|
+
Middleware de autenticação com suporte para múltiplos métodos (JWT, API Keys, Basic Auth, OAuth2, OpenID Connect).
|
|
116
|
+
|
|
117
|
+
### SecurityEnhancedServer
|
|
118
|
+
Servidor com recursos de segurança avançada (WAF) integrados.
|
|
119
|
+
|
|
120
|
+
### RouteLoader
|
|
121
|
+
Carregamento de rotas a partir de arquivos JSON com suporte para autenticação, controladores e especificação de tipo de conteúdo.
|
|
122
|
+
|
|
123
|
+
### TokenManager
|
|
124
|
+
Gerenciamento de tokens JWT com diferentes tipos de armazenamento (memória, JSON, SQLite, MariaDB).
|
|
125
|
+
|
|
126
|
+
### Firewall
|
|
127
|
+
Middleware de firewall com detecção de padrões de ataque e listas brancas/negras.
|
|
128
|
+
|
|
129
|
+
### Sistema de Hooks
|
|
130
|
+
Sistema de hooks e filtros semelhante ao WordPress para extensibilidade.
|
|
131
|
+
|
|
132
|
+
### SessionManager
|
|
133
|
+
Sistema completo de gerenciamento de sessões com suporte para autenticação baseada em sessões.
|
|
134
|
+
|
|
135
|
+
### ViewEngine
|
|
136
|
+
Mecanismo de templates profissional com suporte para filtros, helpers, condições, loops e hooks.
|
|
137
|
+
|
|
138
|
+
### ControllerBase
|
|
139
|
+
Controlador base que facilita o desenvolvimento de controladores MVC com suporte para visualizações.
|
|
140
|
+
|
|
141
|
+
## Segurança
|
|
142
|
+
|
|
143
|
+
O framework inclui múltiplas camadas de segurança:
|
|
144
|
+
|
|
145
|
+
- **Web Application Firewall (WAF)**: Detecção de injeção SQL, XSS, travessia de caminho, etc.
|
|
146
|
+
- **Limitação de Taxa**: Limitação de requisições por IP ou usuário
|
|
147
|
+
- **Firewall**: Bloqueio automático por tentativas falhas
|
|
148
|
+
- **Listas Brancas/Negras**: Controle de acesso por IP
|
|
149
|
+
- **Auditoria de Segurança**: Registro de eventos de segurança
|
|
150
|
+
- **Autenticação Robusta**: Suporte para múltiplos métodos de autenticação
|
|
151
|
+
|
|
152
|
+
## Sistema de Hooks
|
|
153
|
+
|
|
154
|
+
O framework inclui um sistema de hooks e filtros semelhante ao WordPress:
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
const { hooks } = require('jerkjs');
|
|
158
|
+
|
|
159
|
+
// Registrar uma ação
|
|
160
|
+
hooks.addAction('firewall_request_blocked', (rule, clientIP, req, res) => {
|
|
161
|
+
console.log(`Solicitação bloqueada: ${rule.name} para IP: ${clientIP}`);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// Registrar um filtro
|
|
165
|
+
hooks.addFilter('session_create_data', (userData, req) => {
|
|
166
|
+
return {
|
|
167
|
+
...userData,
|
|
168
|
+
ipAddress: req.headers['x-forwarded-for'] || req.connection.remoteAddress,
|
|
169
|
+
createdAt: new Date().toISOString()
|
|
170
|
+
};
|
|
171
|
+
});
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Mecanismo de Templates MVC
|
|
175
|
+
|
|
176
|
+
O framework inclui um mecanismo de templates profissional com suporte para:
|
|
177
|
+
|
|
178
|
+
- Variáveis: `{{variable}}`
|
|
179
|
+
- Condições: `{{if variable}}conteúdo{{endif}}`
|
|
180
|
+
- Loops: `{{foreach:array}}conteúdo{{endforeach}}`
|
|
181
|
+
- Inclusões: `{{include:header}}`
|
|
182
|
+
- Filtros: `{{variable|upper}}`
|
|
183
|
+
- Helpers personalizados
|
|
184
|
+
|
|
185
|
+
## Gerenciamento de Sessões
|
|
186
|
+
|
|
187
|
+
O framework inclui um sistema completo de gerenciamento de sessões:
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
const { SessionManager } = require('jerkjs');
|
|
191
|
+
|
|
192
|
+
const sessionManager = new SessionManager({
|
|
193
|
+
secret: 'your-session-secret',
|
|
194
|
+
timeout: 3600000 // 1 hora
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
// Usar como middleware
|
|
198
|
+
server.use(sessionManager.middleware());
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Exemplos
|
|
202
|
+
|
|
203
|
+
O projeto inclui vários exemplos completos:
|
|
204
|
+
|
|
205
|
+
- **v2_json_auth**: Autenticação JWT com tokens armazenados em JSON
|
|
206
|
+
- **v2_mariadb_auth**: Autenticação JWT com tokens armazenados em MariaDB
|
|
207
|
+
- **v2_sqlite_auth**: Autenticação JWT com tokens armazenados em SQLite
|
|
208
|
+
- **public**: API pública de exemplo com CORS e limitação de taxa
|
|
209
|
+
- **frontend**: Exemplo de servidor que combina API e frontend com diferentes tipos de conteúdo
|
|
210
|
+
- **hooks**: Exemplo avançado de uso do sistema de hooks com logging e rastreamento de solicitações
|
|
211
|
+
|
|
212
|
+
Para ver os exemplos completos, visite os diretórios `v2examplle/` e `examples/`.
|
|
213
|
+
|
|
214
|
+
## Documentação
|
|
215
|
+
|
|
216
|
+
Além da documentação no README, o projeto inclui documentação adicional:
|
|
217
|
+
|
|
218
|
+
- **Guia de início rápido**: `docs/guia_inicio_rapido_jerkjs.md` - Um guia completo para começar rapidamente com o JERKJS, incluindo formatos de arquivos, estrutura de controladores, mecanismo de templates e sistema de hooks.
|
|
219
|
+
|
|
220
|
+
## Contribuições
|
|
221
|
+
|
|
222
|
+
As contribuições são bem-vindas. Por favor, abra uma issue ou envie um pull request no GitLab.
|
|
223
|
+
|
|
224
|
+
## Licença
|
|
225
|
+
|
|
226
|
+
Apache 2.0
|
|
227
|
+
|
|
228
|
+
## Documentação do Framework
|
|
229
|
+
|
|
230
|
+
Para uma descrição detalhada da arquitetura e componentes do framework, consulte o arquivo [JERK_FRAMEWORK_DOCUMENTATION.md](JERK_FRAMEWORK_DOCUMENTATION.md).
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Arquitectura del Sistema de Rutas en JERK Framework
|
|
2
|
+
|
|
3
|
+
## Descripción General
|
|
4
|
+
|
|
5
|
+
El sistema de rutas en JERK Framework permite definir endpoints de API mediante dos métodos principales:
|
|
6
|
+
1. Archivo JSON (`routes.json`) - Carga masiva de rutas
|
|
7
|
+
2. Método `addRoute()` - Definición individual de rutas
|
|
8
|
+
|
|
9
|
+
## Componentes Principales
|
|
10
|
+
|
|
11
|
+
### 1. APIServer (lib/core/server.js)
|
|
12
|
+
|
|
13
|
+
Componente principal que gestiona las rutas y el ciclo de vida de la solicitud HTTP.
|
|
14
|
+
|
|
15
|
+
**Características:**
|
|
16
|
+
- Almacena rutas en el array `this.routes`
|
|
17
|
+
- Implementa el método `addRoute(method, path, handler)` para definir rutas individuales
|
|
18
|
+
- Maneja el enrutamiento en `findRoute(method, pathname)`
|
|
19
|
+
- Soporta rutas parametrizadas con conversión a expresiones regulares
|
|
20
|
+
- Mantiene un cache de expresiones regulares para rutas parametrizadas
|
|
21
|
+
- Ejecuta middlewares antes de los handlers de rutas
|
|
22
|
+
- Soporta rutas estáticas para servir archivos desde directorios locales
|
|
23
|
+
|
|
24
|
+
**Método `addRoute`:**
|
|
25
|
+
- Recibe: método HTTP, path y handler
|
|
26
|
+
- Soporta autenticación por ruta
|
|
27
|
+
- Soporta content-type por ruta
|
|
28
|
+
- Soporta rutas estáticas con propiedad `static`
|
|
29
|
+
- Carga controladores desde archivos externos
|
|
30
|
+
- Registra la ruta en el array
|
|
31
|
+
|
|
32
|
+
### 2. RouteLoader (lib/loader/routeLoader.js)
|
|
33
|
+
|
|
34
|
+
Componente encargado de cargar rutas desde archivos JSON.
|
|
35
|
+
|
|
36
|
+
**Características:**
|
|
37
|
+
- Lee y parsea archivos JSON de rutas
|
|
38
|
+
- Valida la estructura del archivo de rutas
|
|
39
|
+
- Carga controladores desde archivos externos
|
|
40
|
+
- Aplica autenticación por ruta
|
|
41
|
+
- Aplica content-type por ruta
|
|
42
|
+
- Soporta rutas estáticas
|
|
43
|
+
- Dispara hooks antes y después de cargar rutas
|
|
44
|
+
- Soporta recarga automática de rutas
|
|
45
|
+
|
|
46
|
+
**Método `loadSingleRoute`:**
|
|
47
|
+
- Carga el módulo del controlador
|
|
48
|
+
- Obtiene el handler del controlador
|
|
49
|
+
- Aplica content-type si está especificado
|
|
50
|
+
- Aplica autenticación si está especificada
|
|
51
|
+
- Procesa rutas estáticas si están definidas
|
|
52
|
+
- Integra el handler procesado con el servidor usando `server.addRoute`
|
|
53
|
+
|
|
54
|
+
## Funcionalidades Soportadas por routes.json
|
|
55
|
+
|
|
56
|
+
### 1. Estructura Básica
|
|
57
|
+
```json
|
|
58
|
+
[
|
|
59
|
+
{
|
|
60
|
+
"path": "/ruta/ejemplo",
|
|
61
|
+
"method": "GET",
|
|
62
|
+
"controller": "./controllers/EjemploController.js",
|
|
63
|
+
"handler": "metodoHandler"
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 2. Content-Type por Ruta
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"contentType": "application/json"
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 3. Autenticación por Ruta
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"auth": "jwt",
|
|
79
|
+
"authOptions": {
|
|
80
|
+
"jwtSecret": "secreto-ejemplo"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Tipos de autenticación soportados:
|
|
86
|
+
- `jwt` - Autenticación JWT
|
|
87
|
+
- `apiKey` - Autenticación por API Key
|
|
88
|
+
- `session` - Autenticación por sesión
|
|
89
|
+
- Otros tipos registrados en el authenticator
|
|
90
|
+
|
|
91
|
+
### 4. Rutas Parametrizadas
|
|
92
|
+
Soporta rutas con parámetros como `/usuarios/:id` que se convierten a expresiones regulares.
|
|
93
|
+
|
|
94
|
+
### 5. Rutas Estáticas
|
|
95
|
+
Soporta rutas para servir archivos estáticos desde directorios locales:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
[
|
|
99
|
+
{
|
|
100
|
+
"path": "/static",
|
|
101
|
+
"method": "GET",
|
|
102
|
+
"static": {
|
|
103
|
+
"dir": "./public",
|
|
104
|
+
"index": ["index.html", "index.htm"],
|
|
105
|
+
"cacheControl": "public, max-age=3600"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Comparativa: routes.json vs addRoute()
|
|
112
|
+
|
|
113
|
+
| Característica | routes.json | addRoute() |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| Definición de rutas | Masiva (archivo JSON) | Individual |
|
|
116
|
+
| Carga de controladores | Automática desde archivos | Manual (función handler) |
|
|
117
|
+
| Autenticación por ruta | ✅ Soportada | ✅ Soportada |
|
|
118
|
+
| Content-Type por ruta | ✅ Soportado | ✅ Soportado |
|
|
119
|
+
| Opciones de autenticación | ✅ Soportadas | ✅ Soportadas |
|
|
120
|
+
| Rutas parametrizadas | ✅ Soportadas | ✅ Soportadas |
|
|
121
|
+
| Rutas estáticas | ✅ Soportadas | ✅ Soportadas |
|
|
122
|
+
| Integración con hooks | ✅ Soportada | ✅ Soportada |
|
|
123
|
+
|
|
124
|
+
## Flujo de Procesamiento de Rutas
|
|
125
|
+
|
|
126
|
+
### Para routes.json:
|
|
127
|
+
1. `RouteLoader.loadRoutes()` lee el archivo JSON
|
|
128
|
+
2. Valida la estructura del archivo
|
|
129
|
+
3. Para cada ruta, `loadSingleRoute()`:
|
|
130
|
+
- Si es ruta estática, llama directamente a `server.addRoute()` con configuración estática
|
|
131
|
+
- Si es ruta dinámica, carga el módulo del controlador
|
|
132
|
+
- Obtiene el handler del controlador
|
|
133
|
+
- Aplica content-type si existe
|
|
134
|
+
- Aplica autenticación si existe
|
|
135
|
+
- Llama a `server.addRoute()` con el handler procesado
|
|
136
|
+
4. El servidor procesa las solicitudes normalmente
|
|
137
|
+
|
|
138
|
+
### Para addRoute():
|
|
139
|
+
1. Cliente llama directamente `server.addRoute(method, path, handler)` o `server.addRoute(configObject)`
|
|
140
|
+
2. La ruta se registra directamente en `this.routes`
|
|
141
|
+
3. Si es una ruta estática (tiene propiedad `static`), se crea un handler especial para servir archivos
|
|
142
|
+
4. El servidor procesa las solicitudes normalmente
|
|
143
|
+
|
|
144
|
+
## Rutas Estáticas
|
|
145
|
+
|
|
146
|
+
### Definición
|
|
147
|
+
Las rutas estáticas permiten servir archivos desde directorios locales. Se definen con la propiedad `static`:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"path": "/assets",
|
|
152
|
+
"method": "GET",
|
|
153
|
+
"static": {
|
|
154
|
+
"dir": "./public/assets",
|
|
155
|
+
"index": ["index.html"],
|
|
156
|
+
"cacheControl": "public, max-age=3600"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Características
|
|
162
|
+
- Sirve cualquier archivo dentro del directorio especificado
|
|
163
|
+
- Detecta automáticamente el tipo MIME
|
|
164
|
+
- Soporta archivos índice para carpetas
|
|
165
|
+
- Permite configurar headers de caché
|
|
166
|
+
- Previene ataques de path traversal
|
|
167
|
+
- Compatible con el sistema de hooks del framework
|
|
168
|
+
|
|
169
|
+
### Integración con Hooks
|
|
170
|
+
El sistema de rutas estáticas incluye integración con el sistema de hooks:
|
|
171
|
+
|
|
172
|
+
- `pre_static_file_serve`: Antes de procesar un archivo estático
|
|
173
|
+
- `static_file_served`: Después de servir un archivo estático
|
|
174
|
+
- `static_file_not_found`: Cuando no se encuentra un archivo estático
|
|
175
|
+
- `static_file_access_denied`: Cuando se niega el acceso a un archivo estático
|
|
176
|
+
- `serving_index_file`: Cuando se sirve un archivo índice
|
|
177
|
+
- `static_directory_no_index`: Cuando un directorio no tiene archivo índice
|
|
178
|
+
- `before_reading_static_file`: Antes de leer un archivo estático
|
|
179
|
+
- `static_file_error`: Cuando ocurre un error al servir un archivo estático
|
|
180
|
+
|
|
181
|
+
## Problemas Resueltos
|
|
182
|
+
|
|
183
|
+
### 1. Soporte para archivos estáticos
|
|
184
|
+
- Se ha añadido soporte nativo para servir archivos estáticos
|
|
185
|
+
- Ambos sistemas (routes.json y addRoute) soportan rutas estáticas
|
|
186
|
+
- Se mantiene la seguridad y funcionalidad existente
|