Выразительный JavaScript (Хавербеке) - страница 226

Итог

Node – отличная простая система, позволяющая запускать JavaScript вне браузера. Изначально она разрабатывалась для работы по сети, чтобы играть роль узла в сети. Но она позволяет делать много всего, и если вы наслаждаетесь программированием на JavaScript, автоматизация ежедневных задач с Node работает отлично.

NPM предоставляет библиотеки для всего, что вам может прийти в голову (и даже для кое-чего, что вам не придёт в голову), и она позволяет скачивать и устанавливать их простой командой. Node также поставляется с набором встроенных модулей, включая >“fs” для работы с файловой системой, и >“http” для запуска HTTP-серверов и создания HTTP-запросов.

Весь ввод и вывод в Node делается асинхронно, если только вы не используете явно синхронный вариант функции, например >fs.readFileSync. Вы предоставляете функции обратного вызова, а Node их вызывает в нужное время, когда операции I/O заканчивают работу.

Упражнения

И снова согласование содержания

В главе 17 первое упражнение было посвящено созданию запросов к eloquentjavascript.net/author, спрашивавших разные типы содержимого путём передачи разных заголовков Accept.

Сделайте это снова, используя функцию Node >http.request. Запросите, по крайней мере, типы >text/plain, >text/html и >application/json. Помните, что заголовки запроса можно передавать как объект в свойстве >headers, первым аргументом >http.request.

Выведите содержимое каждого ответа.

Устранение утечек

Для упрощения доступа к файлам я оставил работать сервер у себя на компьютере, в директории >/home/marijn/public. Однажды я обнаружил, что кто-то получил доступ ко всем моим паролям, которые я хранил в браузере. Что случилось?

Если вам это непонятно, вспомните функцию >urlToPath, которая определялась так:

>function urlToPath(url) {

>  var path = require("url").parse(url).pathname;

>  return "." + decodeURIComponent(path);

>}

Теперь вспомните, что пути, передаваемые в функцию >“fs”, могут быть относительными. Они могут содержать путь >“../” в верхний каталог. Что будет, если клиент отправит запросы на URL вроде следующих:

>http://myhostname:8000/../.config/config/google-chrome/Default/Web%20Data

>http://myhostname:8000/../.ssh/id_dsa

>http://myhostname:8000/../../../etc/passwd

Поменяйте функцию >urlToPath для устранения подобной проблемы. Примите во внимание, что на Windows Node разрешает как прямые так и обратные слэши для задания путей.

Кроме этого, поразмышляйте над тем фактом, что как только вы выставляете сырую систему в интернет, ошибки в системе могут быть использованы против вас и вашего компьютера.