Готовый перевод Node Up and Running / Node В начале... (рабочее название): --- Первые шаги в коде
В этом разделе мы рассмотрим простую программу на Node, прежде чем перейти к более сложным примерам.
Node ЦЧВВ [цикл чтения-выполнения-вывода] (также можно перевести как «работа с Node в интерактивном режиме»)
Бывает сложно понять, что Node, помимо сервера, является еще и средой выполнения, также как Perl, Python или Ryby. Несмотря на то, что мы часто называем Node «серверным JavaScript», это не в полной мере соответствует тому, чем является Node. Одним из лучших способов ознакомиться с Node поближе — использовать Node в интерактивном режиме [цикл чтения-выполнения-вывода].
Это очень удобно для тестирования и изучения Node.js. Вы можете выполнить любые примеры кода из этой книги, используя интерактивную среду. Также, поскольку Node — это обертка над V8, интерактивная среда также удобна для тестирования JavaScript. Однако, когда вы хотите выполнить программу для Node, вы можете воспользоваться своим любимым текстовым редактором, сохранить программу в файл и просто запустить node filename.js. Интерактивная среда хороша для изучения и экспериментов, но мы не используем ее для продакшен-кода[как это по-русски?]
Давайте запустим интерактивную среду Node и выполним немного JavaScript для разминки (Пример 1—6). Запустите консоль в своей операционной системе. Я использую мак с нестандартной консолью, поэтому то, что вы увидите у себя, может несколько отличаться, но команды должны быть такими же.
Пример 1—6. Запуск интерактивной среды Node и выполнение JavaScript.
Первая строка, которая возвращает false, взята с wtfjs.com — коллекции странных и занимательных примеров на JavaScript.
Использование интерактивного программного окружения — отличный способ изучения, но вам следует знать несколько полезных возможностей интерактивной среды Node, которые вам помогут. Она предоставляет мета-команды, которые начинаются с точки (.). Таким образом .help показывает меню помощи, .clear очищает текущий контекст, а .exit выходит из интерактивной среды Node (см. Пример 1—7). Наиболее полезная команда — .clear, которая удаляет все переменные и замыкания, без необходимости перезапускать всю интерактивную среду.
Пример 1—7. Использование метавозможностей в интерактивной среде Node.
При использовании интерактивной среды, набрав имя переменной вы получите ее значение. Node пытается делать это интеллектуально, таким образом сложный объект не будет представлен просто как Object, но будет выражен описанием того, что в нем содержится (Пример 1—8). Основным исключением являются функции. Это не значит, что интерактивная среда не может показать вам функцию, просто функции зачастую бывают очень большими. Если интерактивная среда будет выводить функции, вы можете получить слишком много текста.
Пример 1—8. Определение и вычисление [вывод?] объектов в интерактивной среде.
Первый сервер.
Интерактивная среда — прекрасный инструмент для изучения и экспериментов, но основное применение Node.js — использование в качестве сервера. Одной из целей, поставленных при разработке Node.js было предоставить хорошо масштабируемое серверное окружение. Это та область, в которой Node отличается от V8, описанного в начале главы [раздела?]. Хотя V8 используется в Node для интерпретации JavaScript, Node.js также использует большое количество хорошо оптимизированных библиотек, чтобы сделать работу сервера эффективной.
В частности, модуль HTTP был написан с нуля на C, чтобы обеспечить очень быструю неблокирующую реализацию HTTP. Давайте посмотрим на [канонический] "Hello World" на Node, использующий HTTP-сервер (Пример 1—9).
Пример 1—9. Hello World с использованием веб-сервера Node.js.
Первое, что делает этот код — использует require, чтобы включить библиотеку HTTP в программу. Эта концепция используется во многих языках, но Node использует формат модулей CommonJS, о котором мы поговорим в главе 8. Основная идея, которую вы должны знать сейчас, что теперь функционал билбиотеки HTTP реализуется через объект http.
Теперь нам нужен HTTP-сервер. В отличие от некоторых языков, таких как PHP, которые выполняются под управлением сервера, например, Apache, Node сам является сервером. Однако это также означает, что мы должны его создать. На следующей строке вызывается [фабричный метод] из модуля HTTP, который создает новые HTTP-серверы. Новый HTTP-сервер не присваивается переменной, он просто является анонимным объектом в глобальной области видимости. Вместо этого мы используем [chaining - как адекватно перевести?] чтобы инициализировать сервер и назначить его слушать 8124 порт.
Вызывая createServer мы передали ему анонимную функцию как аргумент. Эта функция назначается обработчику события request в новом сервере. События — основополагающее понятие как для JavaScript, так и для Node. В этом случае, когда происходит запрос к веб-серверу, он вызовет метод, который мы передали, для обработки запроса. Такая разновидность методов называется [обратными вызовами], поскольку когда происходит событие, мы вызываем все методы, которые его ожидают. [нужно ли вообще это пояснение, оно почти теряет смысл в переводе?]
Возможно, хорошей аналогией будет заказ книги в магазине. Когда ваша книга поступает на склад, вам сообщают о том, что вы можете прийти и получить ее. Этот конкретный коллбек принимает аргумент req для объекта запроса и res — для объекта ответа.
В функции, которую мы создали для обработки запросов, мы вызываем несколько методов объекта res. Эти вызовы модифицируют ответ. Пример 1—9 не использует объект запроса, однако обычно вы будете обращаться как к объекту запроса, так и к объекту ответа.
Первое, что мы должны сделать — это задать заголовок HTTP-ответа. Без этого мы не можем отправить ответ клиенту. Это делается с помощью метода res.writeHead. Мы устанавливаем значение в 200 (для HTTP-статуса "200 OK") и передаем список HTTP-заголовков. В нашем случае единственным заголовком, который мы определяем, является Content-type.
После того, как в ответ клиенту мы записали HTTP-заголовок, можно записать тело ответа. В этом случае мы используем один метод чтобы записать тело и закрыть соединение. Метод end закрывает HTTP-соединение, но поскольку мы передали ему строку, он предварительно отправит ее клиенту.
Наконец, последняя строка нашего примера использует console.log. Это просто выводит информацию в стандарнтый поток вывода (stdout), по аналогии с тем, как это делают Firebug и Web Inspector в браузерах. Давайте запустим это в Node.js в консоли и посмотрим, что же получилось (Пример 1—10).
Пример 1—10. Запуск примера Hello World.
Здесь мы запускаем интерактивную среду и вводим код примера (мы не обидимся, если вы скопируете его с сайта). Интерактивная среда Node принимает код, а приграшение … означает, что вы не закончили ввод выражения и должны продолжать ввод. Когда мы выполняем строку console.log, интерактивная среда сообщает, что сервер запущен по адресу http:// 127.0.0.1:8124/. Теперь все готово для того, чтобы запросить в браузере наш пример Hello World (Иллюстрация 1—1).
Работает! Пусть этот пример не особенно впечатляет, но зато нам хватило шести строчек кода, чтоб получить "Hello, world!". Код не самый изящный, но мы уже получили кое-какой результат. В следующей главе нам предстоит увидеть куда больше кода, а пока давайте остановимся и подумаем, почему Node такая, какая она есть.
Иллюстрация 1—1. Просмотр сервера Hello World в браузере.
Переведено на Нотабеноиде
http://notabenoid.org/book/30771/105663
Переводчики: smmurf, jchouse, theigel
Настройки
Готово:
