@e22m4u/js-http-static-router 0.0.2 → 0.1.1
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/README.md +35 -49
- package/dist/cjs/index.cjs +238 -209
- package/example/server.js +29 -26
- package/example/static/nested/file.txt +11 -0
- package/package.json +10 -10
- package/src/http-static-router.d.ts +27 -22
- package/src/http-static-router.js +224 -222
- package/src/index.d.ts +1 -1
- package/src/index.js +1 -1
- package/src/{http-static-route.d.ts → static-route.d.ts} +13 -12
- package/src/static-route.js +91 -0
- package/src/utils/get-pathname-from-url.d.ts +7 -0
- package/src/utils/get-pathname-from-url.js +27 -0
- package/src/utils/get-request-pathname.spec.js +37 -0
- package/src/utils/index.d.ts +1 -1
- package/src/utils/index.js +1 -1
- package/example/static/nested/index.html +0 -10
- package/src/http-static-route.js +0 -73
- package/src/types.d.ts +0 -38
- package/src/utils/normalize-path.d.ts +0 -12
- package/src/utils/normalize-path.js +0 -22
package/README.md
CHANGED
|
@@ -29,65 +29,51 @@ import http from 'http';
|
|
|
29
29
|
import {HttpStaticRouter} from '@e22m4u/js-http-static-router';
|
|
30
30
|
|
|
31
31
|
// создание экземпляра маршрутизатора
|
|
32
|
-
const staticRouter = new HttpStaticRouter(
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
32
|
+
const staticRouter = new HttpStaticRouter({
|
|
33
|
+
// при использовании опции "baseDir", относительные пути
|
|
34
|
+
// в регистрируемых маршрутах будут разрешаться относительно
|
|
35
|
+
// указанного адреса файловой системы
|
|
36
|
+
baseDir: import.meta.dirname,
|
|
37
|
+
// в данном случае "baseDir" указывает
|
|
38
|
+
// на путь к директории текущего модуля
|
|
39
|
+
});
|
|
40
|
+
// доступ к import.meta.dirname возможен
|
|
41
|
+
// только для ESM начиная с Node.js 20.11.0
|
|
42
|
+
|
|
43
|
+
// экспозиция содержимого директории "/static"
|
|
44
|
+
// для доступа по адресу "/assets/{file_name}"
|
|
45
|
+
staticRouter.defineRoute({
|
|
46
|
+
remotePath: '/assets', // путь маршрута
|
|
47
|
+
resourcePath: '../static', // файловый путь
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// объявление файла "./index.html"
|
|
51
|
+
// для доступа по адресу "/home"
|
|
52
|
+
staticRouter.defineRoute({
|
|
53
|
+
remotePath: '/home',
|
|
54
|
+
resourcePath: './static/index.html',
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// создание HTTP сервера и определение
|
|
58
|
+
// функции для обработки запросов
|
|
49
59
|
const server = new http.Server();
|
|
50
|
-
server.on('request', (req, res) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
60
|
+
server.on('request', async (req, res) => {
|
|
61
|
+
const fileSent = await staticRouter.handleRequest(req, res);
|
|
62
|
+
if (!fileSent) {
|
|
63
|
+
res.writeHead(404, {'Content-Type': 'text/plain'});
|
|
64
|
+
res.write('404 Not Found');
|
|
65
|
+
res.end();
|
|
56
66
|
}
|
|
57
|
-
// в противном случае запрос обрабатывается
|
|
58
|
-
// основной логикой приложения
|
|
59
|
-
res.writeHead(200, {'Content-Type': 'text/plain'});
|
|
60
|
-
res.end('Hello from App!');
|
|
61
67
|
});
|
|
62
68
|
|
|
63
69
|
server.listen(3000, () => {
|
|
64
70
|
console.log('Server is running on http://localhost:3000');
|
|
65
71
|
console.log('Try to open:');
|
|
66
|
-
console.log('http://localhost:3000/
|
|
67
|
-
console.log('http://localhost:3000/file.txt');
|
|
72
|
+
console.log('http://localhost:3000/home');
|
|
73
|
+
console.log('http://localhost:3000/assets/file.txt');
|
|
68
74
|
});
|
|
69
75
|
```
|
|
70
76
|
|
|
71
|
-
### trailingSlash
|
|
72
|
-
|
|
73
|
-
Так как в HTML обычно используются относительные пути, чтобы файлы
|
|
74
|
-
стилей и изображений загружались относительно текущего уровня вложенности,
|
|
75
|
-
а не обращались на уровень выше, может потребоваться параметр `trailingSlash`
|
|
76
|
-
для принудительного добавления косой черты в конце адреса.
|
|
77
|
-
|
|
78
|
-
```js
|
|
79
|
-
import http from 'http';
|
|
80
|
-
import {HttpStaticRouter} from '@e22m4u/js-http-static-router';
|
|
81
|
-
|
|
82
|
-
const staticRouter = new HttpStaticRouter({
|
|
83
|
-
trailingSlash: true, // <= добавлять косую черту (для директорий)
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
// теперь, при обращении к директориям без закрывающего
|
|
87
|
-
// слеша будет выполняться принудительный редирект (302)
|
|
88
|
-
// /dir => /dir/
|
|
89
|
-
```
|
|
90
|
-
|
|
91
77
|
## Тесты
|
|
92
78
|
|
|
93
79
|
```bash
|