Что такое сервер?

Сервер предоставляет функциональные возможности клиентскому приложению. Когда вы посещали этот блог (и большое-большое спасибо за это), ваш компьютер обслуживал эту веб-страницу с сервера Medium.com. Сейчас на Medium много статей и других данных, и вы и ваш компьютер не будете заинтересованы в получении их всех, поэтому ваш конкретный путь (все это после http://medium.com/) служит только эта статья.

Почему NodeJS?

У NodeJS много чего происходит «под капотом», и он предоставляет вашей среде JS множество чрезвычайно полезных плагинов (далее именуемых «методы») для работы. Node также включает менеджер пакетов «npm», который дает разработчикам огромное количество других плагинов/пакетов/зависимостей для использования в своих приложениях. Мы не будем вдаваться в подробности здесь, потому что эта статья посвящена «голому» Node. Не позволяйте имени вводить в заблуждение. Даже на «голом» сервере Node многое происходит за кулисами.

Как настроить сервер в 10 строк

Используйте команды терминала для инициализации каталога (my-server) и создайте два файла, которые нам нужны для демонстрации нашего сервера Node.

$ mkdir мой-сервер

$ cd мой-сервер

$ touch server.js

$ коснитесь index.html

Теперь вы создали файл javascript server.js в папке my-server. Я использую Sublime Text 3 и теперь могу открыть папку с помощью следующей команды:

$ великолепно .

Этот CLI изначально не настроен для Sublime. Если вы хотите настроить это, ознакомьтесь с этой записью в блоге. В противном случае просто откройте папку, используя следующее:

открыть .

Который откроет каталог в Finder. Затем вы можете открыть «server.js» в любом редакторе кода, который вам нравится использовать.

Вам нужно будет установить NodeJS и npm, если вы еще этого не сделали.

Итак, теперь мы готовы кодировать.

Во-первых, давайте сделаем действительно скучный index.html для обслуживания.

Этот файл может быть настолько декоративным, насколько вы пожелаете. Мой пример оставляет много места для воображения, но он, по крайней мере, отобразит некоторый текст, когда мы его обслужим.

Теперь, как мы это делаем?

Фрагменты кода require(‘http’), require(‘fs’) используют модули NodeJS HTTP и fs. Вы можете узнать больше о Node и методах, которые мы будем использовать, из документации.

Сервер инициализируется как переменная (строка 3) и присваивается ему свойство http createServer, которое на самом деле является методом, который настраивает, какие ответы соответствуют каким запросам. Строки 4–6 начинают писать заголовки для ответа, об этом позже. В строках 7–9 используется «fs», который считывает файл по указанному пути («__dirname» указывает на локальный каталог, а затем добавляет бит «/index.html» в конец). Мой компьютер читает это как,

‘/Users/zack/Documents/BlogResources/10lineserver/index.html’

но у вас, конечно, будет несколько иначе. Таким образом, fs считывает все, что находит по этому пути, и либо завершается успешно, либо завершается ошибкой (что затем определяет, имеют ли значение параметры «err» или «contents»). Я предположил, что у меня получится, и поэтому написал в строке 8 «response.end(contents)», что означает, что ответ готов и будет отправлен. Наконец, строка 10 говорит серверу начать прослушивание запросов.

Вы могли заметить, что мой сервер пишет только ответ (и заголовок ответа) независимо от сделанного запроса. В поле объекта запрос происходят некоторые действительно полезные вещи, такие как request.url, конечная точка запроса (например: http://yoursite.com/some_endpoint/) и request.method, который относится к типу запроса (GET, POST, DELETE и т. д.).

Ответы вашего сервера можно настроить с помощью условий на основе значения «request.url», «request.method» или «request.body». На данный момент мы просто хотели обслуживать наш html, но есть множество других интересных типов файлов и данных, которые мы можем предоставить нашим клиентам даже через простой сервер.