Node.js быстро растет; Одна из главных причин этого — спасибо разработчикам, которые создают удивительные инструменты, которые значительно повышают производительность с Node. В этой статье мы рассмотрим базовую установку Express, среду разработки и создание базового проекта с ее помощью.
Что мы собираемся построить сегодня
По своему дизайну Node похож на системы типа Ruby’s Event Machine или Python Twisted и на них влияют. Node продвигает модель событий немного дальше — он представляет цикл событий в виде языковой конструкции, а не в виде библиотеки.
В этом руководстве мы очистим домашнюю страницу YouTube, получим все миниатюры обычного размера со страницы, а также ссылки и продолжительность видео, отправим все эти элементы в шаблон jQueryMobile и воспроизведем видео с помощью встраивания YouTube (который выполняет отличная работа по обнаружению медиа поддержки устройств (flash / html5-video).
Мы также узнаем, как начать использовать npm и Express , процесс установки модулей npm, базовую маршрутизацию Express и использование двух модулей Node: request
и jsdom
.
Для тех из вас, кто еще не знаком с Node.js и тем, как его установить, обратитесь к домашней странице node.js.
и страницу проекта npm GitHub .
Вам также следует обратиться к нашей серии « Node.js: шаг за шагом ».
Примечание. Это руководство требует и предполагает, что вы понимаете, что такое Node.js, и что у вас уже установлены node.js и npm.
Шаг 1: Настройка Экспресс
Так что же такое Express? По словам его разработчиков, это ..
Безумно быстрая (и маленькая) серверная среда веб-разработки JavaScript, основанная на Node и Connect.
Звучит круто, правда? Давайте использовать npm для установки Express. Откройте окно терминала и введите следующую команду:
1
|
npm install express -g
|
-g
в качестве параметра команде install, мы сообщаем npm сделать глобальную установку модуля.
Я использую /home/node-server/nettuts
для этого примера, но вы можете использовать все, что вам удобно.
После создания нашего экспресс-проекта нам нужно isntruct npm для установки экспресс-зависимостей.
1
2
|
cd nodetube
npm install -d
|
Если это заканчивается «хорошо», тогда вы можете идти. Теперь вы можете запустить свой проект:
1
|
node app.js
|
В вашем браузере перейдите на http://localhost:3000
.
Шаг 2: Установка необходимых модулей
JSDOM
Реализация JavaScript W3C DOM.
Вернитесь к своему терминалу и после остановки текущего сервера (ctr + c) установите jsdom
:
1
|
npm install jsdom
|
Запрос
Упрощенный метод HTTP-запроса.
Введите следующее в Терминал:
1
|
npm install request
|
Все должно быть настроено сейчас. Теперь пришло время перейти к какому-то актуальному коду!
Шаг 3: Создание простого скребка
app.js
Во-первых, давайте включим все наши зависимости. Откройте файл app.js
и в самых первых строках добавьте следующий код:
/ ** * Зависимости модуля. * / var express = require ('express') , jsdom = требуется ('jsdom') , request = require ('request') , url = требуется ('url') , app = module.exports = express.createServer ();
Вы заметите, что Express создал некоторый код для нас. То, что вы видите в app.js
является самой базовой структурой для сервера Node, использующего Express. В нашем предыдущем блоке кода мы указали Express, чтобы он включал наши недавно установленные модули: jsdom
и request
. Кроме того, мы включили модуль URL, который поможет нам проанализировать URL-адрес видео, который мы вычеркнем из YouTube позже.
Выскабливание Youtube.com
В app.js
найдите раздел «Маршруты» (около строки 40) и добавьте следующий код (прочитайте комментарии, чтобы понять, что происходит):
app.get ('/ nodetube', function (req, res) { // Сообщаем запрос, что мы хотим получить youtube.com, отправляем результаты в функцию обратного вызова request ({uri: 'http://youtube.com'}, функция (ошибка, ответ, тело) { var self = this; self.items = new Array (); // Я чувствую, что хочу сохранить свои результаты в массиве // Просто проверка основной ошибки if (err && response.statusCode! == 200) {console.log ('Ошибка запроса.');} // Отправляем параметр body в виде HTML-кода, который мы проанализируем в jsdom // также сообщаем jsdom о присоединении jQuery в скриптах и загрузке с jQuery.com jsdom.env ({ html: body, сценарии: ['http://code.jquery.com/jquery-1.6.min.js'] }, функция (ошибка, окно) { // Используем jQuery так же, как на обычной странице HTML var $ = window.jQuery; console.log ($ ( 'название') текст ().); res.end ($ ( 'название') текст ().); }); }); });
В этом случае мы загружаем контент с домашней страницы YouTube. По завершении мы печатаем текст, содержащийся в теге заголовка страницы (<title>). Вернитесь в Терминал и снова запустите ваш сервер.
1
|
node app.js
|
В вашем браузере перейдите по http://localhost:3000/nodetube
Вы должны увидеть «YouTube — Broadcast Yourself», который является названием YouTube.
Теперь, когда у нас все настроено и работает, пришло время получить несколько URL-адресов видео. Перейдите на домашнюю страницу YouTube и щелкните правой кнопкой мыши любую миниатюру в разделе «рекомендуемые видео». Если у вас установлен Firebug (что настоятельно рекомендуется), вы должны увидеть что-то вроде следующего:
Есть шаблон, который мы можем определить и который присутствует почти во всех других обычных видео-ссылках:
1
2
|
div.vide-entry
span.clip
|
Давайте сосредоточимся на этих элементах. Вернитесь к своему редактору и в app.js
добавьте следующий код в маршрут /nodetube
:
app.get ('/ nodetube', function (req, res) { // Сообщаем запрос, что мы хотим получить youtube.com, отправляем результаты в функцию обратного вызова запрос({ uri: 'http://youtube.com' }, функция (err, response, body) { var self = this; self.items = new Array (); // Я чувствую, что хочу сохранить свои результаты в массиве // Просто проверка основной ошибки if (err && response.statusCode! == 200) { console.log ('Ошибка запроса.'); } // Отправляем параметр body в виде HTML-кода, который мы проанализируем в jsdom // также сообщаем jsdom о присоединении jQuery в скриптах jsdom.env ({ html: body, сценарии: ['http://code.jquery.com/jquery-1.6.min.js'] }, функция (ошибка, окно) { // Используем jQuery так же, как на любой обычной HTML-странице var $ = window.jQuery, $ body = $ ('body'), $ videos = $ body.find ('. video-entry'); // Я знаю, что элементы .video-entry содержат миниатюры обычного размера // для каждого из найденных элементов .video-entry $ videos.each (function (i, item) { // Я буду использовать обычные селекторы jQuery var $ a = $ (item) .children ('a'), // первый элемент привязки, который является дочерним элементом нашего элемента .video-entry $ title = $ (item) .find ('. video-title .video-long-title'). text (), // название видео $ time = $ a.find ('. video-time'). text (), // продолжительность видео $ img = $ a.find ('span.clip img'); // миниатюрами // и добавить все эти данные в мой массив элементов self.items [i] = { href: $ a.attr ('href'), title: $ title.trim (), время: $ время, // есть некоторые вещи с видео миниатюрами YouTube, те изображения, у которых атрибут data-thumb // определено использование URL в ранее упомянутом атрибуте в качестве src для миниатюры, otheriwse // он будет использовать атрибут src по умолчанию. thumbnail: $ img.attr ('data-thumb')? $ img.attr ('data-thumb'): $ img.attr ('src'), urlObj: url.parse ($ a.attr ('href'), true) // также анализирует наш URL и строку запроса }; }); // посмотрим что у нас получилось console.log (self.items); res.end ( 'Готово'); }); }); });
Пришло время перезапустить наш сервер еще раз и перезагрузить страницу в нашем браузере (http: // localhost: 3000 / nodetube). В вашем терминале вы должны увидеть что-то вроде следующего:
Это выглядит хорошо, но нам нужен способ отобразить наши результаты в браузере. Для этого я буду использовать шаблонизатор Jade :
Jade — это высокопроизводительный шаблонизатор, находящийся под сильным влиянием Haml, но реализованный с помощью JavaScript для Node.
В вашем редакторе откройте views/layout.jade
, который является базовой структурой макета, используемой при визуализации страницы с помощью Express. Это хорошо, но нам нужно немного его изменить.
просмотров / layout.jade
!!! 5 HTML (языки = 'ан') голова Мета (кодировка = 'UTF-8') meta (name = 'viewport', content = 'initial-scale = 1, Maximum-scale = 1') название = название ссылка (rel = 'stylesheet', href = 'http: //code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.css') скрипт (SRC = 'HTTP: //code.jquery.com/jquery-1.6.2.min.js') скрипт (SRC = 'HTTP: //code.jquery.com/mobile/1.0b3/jquery.mobile-1.0b3.min.js') тело! = тело
Если вы сравните приведенный выше код с кодом по умолчанию в layout.jade
, вы заметите, что изменилось несколько вещей — doctype, метатег viewport, теги style и script, предоставленные jquery.com. Давайте создадим наш вид списка:
просмотров / list.jade
Прежде чем мы начнем, пожалуйста, просмотрите документацию jQuery Mobile (JQM отныне) по макетам страниц и анатомии .
Основная идея состоит в том, чтобы использовать просмотр списка JQM, миниатюру, заголовок и метку продолжительности видео для каждого элемента в просмотре списка вместе со ссылкой на страницу видео для каждого из перечисленных элементов.
Примечание. Будьте осторожны с отступами, которые вы используете в своих документах Jade, так как он принимает только пробелы или символы табуляции, но не оба в одном и том же документе.
ДИВ (данные роли = «страница») Заголовок (данные Роли = «заголовок») h1 = название ДИВ (данные роли = «содержание») // просто базовая проверка, у нас всегда будут элементы из youtube - если (items.length) // создаем оболочку списка уль (данные Роли = «ListView») // foreach собранных элементов - items.forEach (function (item) { // создать жизнь литий // и ссылка с использованием нашего переданного объекта urlObj a (href = '/ watch /' + item ['urlObj']. query.v, title = item ['title']) // и миниатюра img (src = item ['thumbnail'], alt = 'Thumbnail') // заголовок и метка времени h3 = item ['title'] h5 = пункт ['время'] -})
Это все, что нам нужно для создания нашего списка. Вернитесь в app.js
и замените следующий код:
// посмотрим что у нас получилось console.log (self.items); res.end ( 'Готово');
с этим:
// У нас есть все, к чему мы пришли, теперь давайте представим нашу точку зрения res.render ('list', { title: 'NodeTube', предметы: self.items });
Перезагрузите сервер еще раз и перезагрузите браузер:
Примечание. Поскольку мы используем jQuery Mobile, я рекомендую использовать браузер на основе Webkit или мобильный телефон (симулятор) для iPhone / Android для достижения лучших результатов.
Шаг 4: Просмотр видео
Давайте создадим представление для нашего маршрута /watch
. Создайте views/video.jade
и добавьте следующий код:
ДИВ (данные роли = «страница») Заголовок (данные Роли = «заголовок») h1 = название ДИВ (данные роли = «содержание») // Наше видео Div DIV # видео // iframe из youtube, который обслуживает нужный медиа-объект для используемого устройства iframe (ширина = "100%", высота = 215, src = "http://www.youtube.com/embed/" + vid, frameborder = "0", allowfullscreen)
Снова вернитесь к своему терминалу, перезагрузите сервер, перезагрузите страницу и нажмите на любой из перечисленных элементов. На этот раз будет отображена страница видео, и вы сможете воспроизвести вставленное видео!
Бонус: использование Forever для запуска вашего сервера
Есть способы, которыми мы можем поддерживать наш сервер в фоновом режиме, но я предпочитаю один, называемый Forever , модуль узла, который мы можем легко установить с помощью npm
:
1
|
npm install forever -g
|
Это будет глобально установить навсегда. Давайте запустим наше приложение nodeTube:
1
|
forever start app.js
|
Вы также можете перезагрузить свой сервер, использовать пользовательские файлы журналов, передавать переменные среды среди других полезных вещей:
1
2
|
//run your application in production mode
NODE_ENV=production forever start app.js
|
Последние мысли
Я надеюсь, что я продемонстрировал, как легко начать использовать Node.js, Express и npm. Кроме того, вы узнали, как устанавливать модули Node, добавлять маршруты в Express, извлекать удаленные страницы с помощью модуля Request и много других полезных техник.
Если у вас есть какие-либо комментарии или вопросы, пожалуйста, дайте мне знать в разделе комментариев ниже!