@e22m4u/js-trie-router 0.4.3 → 0.5.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/.mocharc.json +5 -0
- package/README.md +38 -3
- package/dist/cjs/index.cjs +88 -84
- package/eslint.config.js +5 -2
- package/examples/uptime-example.js +1 -1
- package/jsconfig.json +7 -0
- package/package.json +15 -18
- package/src/hooks/hook-invoker.spec.js +2 -4
- package/src/hooks/hook-registry.spec.js +1 -2
- package/src/parsers/body-parser.js +6 -3
- package/src/parsers/body-parser.spec.js +6 -3
- package/src/parsers/cookies-parser.js +1 -2
- package/src/request-context.js +7 -0
- package/src/request-context.spec.js +11 -0
- package/src/route-registry.spec.js +1 -2
- package/src/route.spec.js +2 -4
- package/src/senders/error-sender.spec.js +3 -5
- package/src/trie-router.spec.js +5 -10
- package/src/utils/create-error.js +1 -2
- package/.mocharc.cjs +0 -5
- package/src/debuggable-service.d.ts +0 -6
- package/src/hooks/hook-invoker.d.ts +0 -25
- package/src/hooks/hook-registry.d.ts +0 -93
- package/src/hooks/index.d.ts +0 -2
- package/src/index.d.ts +0 -9
- package/src/parsers/body-parser.d.ts +0 -52
- package/src/parsers/cookies-parser.d.ts +0 -15
- package/src/parsers/index.d.ts +0 -4
- package/src/parsers/query-parser.d.ts +0 -21
- package/src/parsers/request-parser.d.ts +0 -34
- package/src/request-context.d.ts +0 -96
- package/src/route-registry.d.ts +0 -39
- package/src/route.d.ts +0 -100
- package/src/router-options.d.ts +0 -18
- package/src/senders/data-sender.d.ts +0 -15
- package/src/senders/error-sender.d.ts +0 -30
- package/src/senders/index.d.ts +0 -2
- package/src/trie-router.d.ts +0 -104
- package/src/types.d.ts +0 -19
- package/src/utils/clone-deep.d.ts +0 -6
- package/src/utils/create-cookies-string.d.ts +0 -6
- package/src/utils/create-debugger.d.ts +0 -11
- package/src/utils/create-error.d.ts +0 -14
- package/src/utils/create-request-mock.d.ts +0 -27
- package/src/utils/create-response-mock.d.ts +0 -17
- package/src/utils/create-route-mock.d.ts +0 -18
- package/src/utils/fetch-request-body.d.ts +0 -26
- package/src/utils/get-request-pathname.d.ts +0 -8
- package/src/utils/index.d.ts +0 -16
- package/src/utils/is-promise.d.ts +0 -10
- package/src/utils/is-readable-stream.d.ts +0 -9
- package/src/utils/is-response-sent.d.ts +0 -8
- package/src/utils/is-writable-stream.d.ts +0 -9
- package/src/utils/parse-content-type.d.ts +0 -15
- package/src/utils/parse-cookies.d.ts +0 -19
- package/src/utils/to-camel-case.d.ts +0 -6
- package/tsconfig.json +0 -11
- /package/{mocha-setup.js → mocha.setup.js} +0 -0
package/.mocharc.json
ADDED
package/README.md
CHANGED
|
@@ -22,7 +22,8 @@ HTTP маршрутизатор для Node.js на основе
|
|
|
22
22
|
- [preHandler](#prehandler)
|
|
23
23
|
- [postHandler](#posthandler)
|
|
24
24
|
- [Глобальные хуки](#глобальные-хуки)
|
|
25
|
-
- [Метаданные](
|
|
25
|
+
- [Метаданные маршрута](#метаданные-маршрута)
|
|
26
|
+
- [Состояние запроса](#состояние-запроса)
|
|
26
27
|
- [Отладка](#отладка)
|
|
27
28
|
- [Тестирование](#тестирование)
|
|
28
29
|
- [Лицензия](#лицензия)
|
|
@@ -100,6 +101,7 @@ server.listen(3000, 'localhost'); // прослушивание за
|
|
|
100
101
|
- `response: ServerResponse` нативный поток ответа сервера;
|
|
101
102
|
- `route: Route` экземпляр текущего маршрута;
|
|
102
103
|
- `meta: object` геттер для доступа к метаданным маршрута (`route.meta`);
|
|
104
|
+
- `state: object` объект для обмена данными между хуками и обработчиком;
|
|
103
105
|
|
|
104
106
|
Пример доступа к контексту из обработчика маршрута.
|
|
105
107
|
|
|
@@ -124,6 +126,7 @@ router.defineRoute({
|
|
|
124
126
|
console.log(ctx.response); // ServerResponse
|
|
125
127
|
console.log(ctx.route); // Route
|
|
126
128
|
console.log(ctx.meta); // {prop: 'value'}
|
|
129
|
+
console.log(ctx.state); // {}
|
|
127
130
|
// ...
|
|
128
131
|
},
|
|
129
132
|
});
|
|
@@ -265,7 +268,7 @@ router.addPostHandler((ctx, data) => {
|
|
|
265
268
|
отличное от `undefined` и `null`, то такое значение будет использовано
|
|
266
269
|
как ответ сервера.
|
|
267
270
|
|
|
268
|
-
### Метаданные
|
|
271
|
+
### Метаданные маршрута
|
|
269
272
|
|
|
270
273
|
Иногда требуется связать с маршрутом дополнительные, статические данные, которые
|
|
271
274
|
могут быть использованы хуками для расширения функционала. Например, это могут
|
|
@@ -293,7 +296,7 @@ router.addPreHandler((ctx) => {
|
|
|
293
296
|
router.defineRoute({
|
|
294
297
|
method: HttpMethod.GET,
|
|
295
298
|
path: '/',
|
|
296
|
-
meta: {foo: 'bar'}, // <=
|
|
299
|
+
meta: {foo: 'bar'}, // <= метаданные
|
|
297
300
|
handler(ctx) {
|
|
298
301
|
return 'Hello World!';
|
|
299
302
|
},
|
|
@@ -303,6 +306,38 @@ server.on('request', router.requestListener);
|
|
|
303
306
|
server.listen(3000, 'localhost');
|
|
304
307
|
```
|
|
305
308
|
|
|
309
|
+
### Состояние запроса
|
|
310
|
+
|
|
311
|
+
Объект `ctx.state` инициализируется как пустой объект `{}` для каждого нового
|
|
312
|
+
запроса. Он предназначен для передачи динамических данных (например, профиля
|
|
313
|
+
пользователя после авторизации) из `preHandler` хуков в основной обработчик
|
|
314
|
+
маршрута или `postHandler` хуки.
|
|
315
|
+
|
|
316
|
+
```js
|
|
317
|
+
import http from 'http';
|
|
318
|
+
import {TrieRouter, HttpMethod} from '@e22m4u/js-trie-router';
|
|
319
|
+
|
|
320
|
+
const router = new TrieRouter();
|
|
321
|
+
|
|
322
|
+
// глобальный хук авторизации
|
|
323
|
+
router.addPreHandler((ctx) => {
|
|
324
|
+
// логика получения пользователя (например, из заголовков)
|
|
325
|
+
const user = {id: 1, name: 'John', role: 'admin'};
|
|
326
|
+
// сохранение данных в state
|
|
327
|
+
ctx.state.user = user;
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
router.defineRoute({
|
|
331
|
+
method: HttpMethod.GET,
|
|
332
|
+
path: '/profile',
|
|
333
|
+
handler(ctx) {
|
|
334
|
+
// доступ к данным, установленным в хуке
|
|
335
|
+
const user = ctx.state.user;
|
|
336
|
+
return `Hello, ${user.name}!`;
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
```
|
|
340
|
+
|
|
306
341
|
## Отладка
|
|
307
342
|
|
|
308
343
|
Установка переменной `DEBUG` включает вывод логов.
|