Сервер Node.js без фреймворка¶
В этой статье представлен простой статический файловый сервер, построенный на чистом Node.js без использования фреймворка.
Современное состояние Node.js таково, что практически все, что нам нужно, обеспечивается встроенными API и всего несколькими строчками кода.
Пример¶
Простой статический файловый сервер, построенный с помощью Node.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
Разбиение¶
Следующие строки импортируют внутренние модули Node.js.
1 2 3 |
|
Далее у нас есть функция для создания сервера. https.createServer
возвращает объект Server
, который мы можем запустить, прослушивая по PORT
.
1 2 3 4 5 |
|
Асинхронная функция prepareFile
возвращает структуру: { found: boolean , ext: string, stream: ReadableStream }
. Если файл может быть передан (серверный процесс имеет доступ и уязвимость обхода пути не обнаружена), то в качестве statusCode
, указывающего на успех, мы вернем HTTP-статус 200
(в противном случае мы вернем HTTP 404
). Обратите внимание, что другие коды статуса можно найти в http.STATUS_CODES
. При статусе 404
мы вернем содержимое файла '/404.html
.
Расширение запрашиваемого файла будет разобрано и приведено к нижнему регистру. После этого мы выполним поиск в коллекции MIME_TYPES
нужных MIME-типов. Если совпадений не найдено, то в качестве типа по умолчанию используется application/octet-stream
.
Наконец, если ошибок нет, мы отправляем запрошенный файл. В file.stream
будет содержаться поток Readable
, который будет передан в res
(экземпляр потока Writable
).
1 2 |
|