Node Up and Running / Node В начале... (рабочее название): --- Первые шаги в коде
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
В этом разделе мы рассмотрим простую программу на Node, прежде чем перейти к более сложным примерам. smmurf 09.07.12 в 09:30 |
|
|
Node ЦЧВВ [цикл чтения-выполнения-вывода] (также можно перевести как «работа с Node в интерактивном режиме») smmurf 09.07.12 в 09:33 |
+3 | |
|
Бывает сложно понять, что Node, помимо сервера, является еще и средой выполнения, также как Perl, Python или Ryby. Несмотря на то, что мы часто называем Node «серверным JavaScript», это не в полной мере соответствует тому, чем является Node. Одним из лучших способов ознакомиться с Node поближе — использовать Node в интерактивном режиме [цикл чтения-выполнения-вывода]. smmurf 09.07.12 в 09:47 |
||
|
Это очень удобно для тестирования и изучения Node.js. Вы можете выполнить любые примеры кода из этой книги, используя интерактивную среду. Также, поскольку Node — это обертка над V8, интерактивная среда также удобна для тестирования JavaScript. Однако, когда вы хотите выполнить программу для Node, вы можете воспользоваться своим любимым текстовым редактором, сохранить программу в файл и просто запустить node filename.js. Интерактивная среда хороша для изучения и экспериментов, но мы не используем ее для продакшен-кода[как это по-русски?] smmurf 16.07.12 в 13:13 |
||
|
Давайте запустим интерактивную среду Node и выполним немного JavaScript для разминки (Пример 1—6). Запустите консоль в своей операционной системе. Я использую мак с нестандартной консолью, поэтому то, что вы увидите у себя, может несколько отличаться, но команды должны быть такими же. smmurf 16.07.12 в 13:28 |
||
|
Пример 1—6. Запуск интерактивной среды Node и выполнение JavaScript. smmurf 16.07.12 в 16:32 |
||
|
Первая строка, которая возвращает false, взята с wtfjs.com — коллекции странных и занимательных примеров на JavaScript. smmurf 16.07.12 в 16:36 |
||
|
Использование интерактивного программного окружения — отличный способ изучения, но вам следует знать несколько полезных возможностей интерактивной среды Node, которые вам помогут. Она предоставляет мета-команды, которые начинаются с точки (.). Таким образом .help показывает меню помощи, .clear очищает текущий контекст, а .exit выходит из интерактивной среды Node (см. Пример 1—7). Наиболее полезная команда — .clear, которая удаляет все переменные и замыкания, без необходимости перезапускать всю интерактивную среду. smmurf 16.07.12 в 17:05 |
||
|
Пример 1—7. Использование метавозможностей в интерактивной среде Node. smmurf 17.07.12 в 14:28 |
||
|
При использовании интерактивной среды, набрав имя переменной вы получите ее значение. Node пытается делать это интеллектуально, таким образом сложный объект не будет представлен просто как Object, но будет выражен описанием того, что в нем содержится (Пример 1—8). Основным исключением являются функции. Это не значит, что интерактивная среда не может показать вам функцию, просто функции зачастую бывают очень большими. Если интерактивная среда будет выводить функции, вы можете получить слишком много текста. smmurf 17.07.12 в 14:50 |
||
|
Пример 1—8. Определение и вычисление [вывод?] объектов в интерактивной среде. smmurf 17.07.12 в 14:51 |
||
|
Первый сервер. jchouse 10.07.12 в 11:39 |
||
|
Интерактивная среда — прекрасный инструмент для изучения и экспериментов, но основное применение Node.js — использование в качестве сервера. Одной из целей, поставленных при разработке Node.js было предоставить хорошо масштабируемое серверное окружение. Это та область, в которой Node отличается от V8, описанного в начале главы [раздела?]. Хотя V8 используется в Node для интерпретации JavaScript, Node.js также использует большое количество хорошо оптимизированных библиотек, чтобы сделать работу сервера эффективной. smmurf 17.07.12 в 15:22 |
||
|
В частности, модуль HTTP был написан с нуля на C, чтобы обеспечить очень быструю неблокирующую реализацию HTTP. Давайте посмотрим на [канонический] "Hello World" на Node, использующий HTTP-сервер (Пример 1—9). smmurf 17.07.12 в 15:28 |
||
|
Пример 1—9. Hello World с использованием веб-сервера Node.js. smmurf 17.07.12 в 15:56 |
||
|
Первое, что делает этот код — использует require, чтобы включить библиотеку HTTP в программу. Эта концепция используется во многих языках, но Node использует формат модулей CommonJS, о котором мы поговорим в главе 8. Основная идея, которую вы должны знать сейчас, что теперь функционал билбиотеки HTTP реализуется через объект http. smmurf 17.07.12 в 16:30 |
||
|
Теперь нам нужен HTTP-сервер. В отличие от некоторых языков, таких как PHP, которые выполняются под управлением сервера, например, Apache, Node сам является сервером. Однако это также означает, что мы должны его создать. На следующей строке вызывается [фабричный метод] из модуля HTTP, который создает новые HTTP-серверы. Новый HTTP-сервер не присваивается переменной, он просто является анонимным объектом в глобальной области видимости. Вместо этого мы используем [chaining - как адекватно перевести?] чтобы инициализировать сервер и назначить его слушать 8124 порт. smmurf 17.07.12 в 16:47 |
||
|
Вызывая createServer мы передали ему анонимную функцию как аргумент. Эта функция назначается обработчику события request в новом сервере. События — основополагающее понятие как для JavaScript, так и для Node. В этом случае, когда происходит запрос к веб-серверу, он вызовет метод, который мы передали, для обработки запроса. Такая разновидность методов называется [обратными вызовами], поскольку когда происходит событие, мы вызываем все методы, которые его ожидают. [нужно ли вообще это пояснение, оно почти теряет смысл в переводе?] smmurf 17.07.12 в 16:58 |
||
|
Возможно, хорошей аналогией будет заказ книги в магазине. Когда ваша книга поступает на склад, вам сообщают о том, что вы можете прийти и получить ее. Этот конкретный коллбек принимает аргумент req для объекта запроса и res — для объекта ответа. smmurf 17.07.12 в 17:01 |
||
|
В функции, которую мы создали для обработки запросов, мы вызываем несколько методов объекта res. Эти вызовы модифицируют ответ. Пример 1—9 не использует объект запроса, однако обычно вы будете обращаться как к объекту запроса, так и к объекту ответа. smmurf 17.07.12 в 17:07 |
||
|
Первое, что мы должны сделать — это задать заголовок HTTP-ответа. Без этого мы не можем отправить ответ клиенту. Это делается с помощью метода res.writeHead. Мы устанавливаем значение в 200 (для HTTP-статуса "200 OK") и передаем список HTTP-заголовков. В нашем случае единственным заголовком, который мы определяем, является Content-type. smmurf 17.07.12 в 17:13 |
||
|
После того, как в ответ клиенту мы записали HTTP-заголовок, можно записать тело ответа. В этом случае мы используем один метод чтобы записать тело и закрыть соединение. Метод end закрывает HTTP-соединение, но поскольку мы передали ему строку, он предварительно отправит ее клиенту. smmurf 17.07.12 в 17:16 |
||
|
Наконец, последняя строка нашего примера использует console.log. Это просто выводит информацию в стандарнтый поток вывода (stdout), по аналогии с тем, как это делают Firebug и Web Inspector в браузерах. Давайте запустим это в Node.js в консоли и посмотрим, что же получилось (Пример 1—10). smmurf 17.07.12 в 17:21 |
||
|
Пример 1—10. Запуск примера Hello World. smmurf 17.07.12 в 17:22 |
||
|
Здесь мы запускаем интерактивную среду и вводим код примера (мы не обидимся, если вы скопируете его с сайта). Интерактивная среда Node принимает код, а приграшение … означает, что вы не закончили ввод выражения и должны продолжать ввод. Когда мы выполняем строку console.log, интерактивная среда сообщает, что сервер запущен по адресу http:// 127.0.0.1:8124/. Теперь все готово для того, чтобы запросить в браузере наш пример Hello World (Иллюстрация 1—1). smmurf 17.07.12 в 17:30 |
||
|
Работает! Пусть этот пример не особенно впечатляет, но зато нам хватило шести строчек кода, чтоб получить "Hello, world!". Код не самый изящный, но мы уже получили кое-какой результат. В следующей главе нам предстоит увидеть куда больше кода, а пока давайте остановимся и подумаем, почему Node такая, какая она есть. theigel 10.07.12 в 08:35 Работает! И хотя это не впечатляющий пример, стоит отметить, что наш Hello World занимает всего 6 строк кода. Нельзя сказать, что мы рекомендовали бы такой стиль программирования, но надо же с чего-то начать. В следующей главе мы рассмотрим гораздо больше кода, но для начала давайте поразмышляем, почему Node именно такой, какой есть. smmurf 17.07.12 в 17:32 |
||
|
Иллюстрация 1—1. Просмотр сервера Hello World в браузере. smmurf 17.07.12 в 17:33 |
