Посібник для початківців Node.js (JavaScript на сервері)
Node.js - простими словами - це на стороні сервера. Вона отримує багато гудіння в ці дні. Якщо ви чули про неї або ви зацікавлені в отриманні певних рук - ця посада для вас.
Що ж таке необхідність використання JavaScript на сервері? Щоб зрозуміти концепцію Node.js я хотів би порівняти її з звичайними серверними мовами, такими як PHP. Node.js використовує процедура виконання сервера на основі подій замість багатопотокового виконання в PHP.
Щоб пояснити це далі, ми будемо говорити про ідею що таке Node.js разом з деякими пропозиції хостингу та інсталяційні поради. Потрібні середні рівні знань JavaScript, jQuery і Ajax, але ми також надамо приклади, щоб ви зрозуміли все це легше і навіть працюєте над ним, так що давайте дізнаємося більше про Node.js!
Розглянемо випадок:
Розглянемо веб-сайт, на якому потрібно динамічно завантажувати вміст з іншого веб-сервера, який є повільним. У PHP ви можете зробити це 2 способами - кодування в простому файлі і кодує його як інший сценарій, потім виконання його в багатопотоковому підході.
У першому методі, хоча код простий виконання на деякий час паузи в місці, де здійснюється доступ до повільного веб-сервера. Другий метод більш оптимізовані у разі виконання але це важко кодувати, і вона має накладні витрати на багатопотокове керування. Цей випадок подібний для більшості мов веб-програмування, відмінних від серверного JavaScript, тобто Node.js.
У чому різниця в Node.js? Щоб зрозуміти Node.js, ви повинні мати на увазі Програмування на основі подій JavaScript у веб-переглядачі. Ми використовуємо ту ж саму технологію. Замість використання окремого потоку, a функція додається до завершення події з “повільний доступ до веб-сервера” згаданих вище, таким чином ви отримаєте повна функціональність у оптимізованому другому варіанті, згаданому вище, без багатопоточних накладних витрат.
Початок роботи з Node.js
Node.js - JavaScript. Чому ми не можемо використовувати функцію JavaScript на основі подій у клієнті на сервер? Ця думка може призвести до розвитку Node.js.
Тим не менш, головна родзинка Node.js - це асинхронні функції на основі подій. Він використовує цикл подій замість очікування операцій вводу / виводу (доступ до зовнішнього веб-сервісу, доступ до обладнання).
Node.js все ще може використовувати його обробну потужність коли сервер чекає будь-яку іншу операцію. Це робить Node.js масштабована до мільйонів одночасних з'єднань.
Як працює JavaScript на сервері?
Node.js працює на середовищі v8 - це a віртуальна машина або a Двигун JavaScript який запускає код JavaScript, тому для хостингу ви не можете використовувати звичайні веб-хости. Вам знадобляться ті, що мають середовище v8.
Ось деякі пропозиції постачальника для хостингу Node.js:
- Хмара ливарне
- Cloudnode
- DotCloud
- Duostack
Встановлення Node.js
Вузол буде прекрасно працюють на операційних системах Linux, Macintosh і Solaris. У Windows можна встановити його за допомогою шару емуляції Cygwin. Жодна з збірок у Windows не є задовільною, але все одно можна отримати щось запущене.
Варіант 1: Створення вузла з джерела.
Використовуйте зробити
створювати та встановлювати node.js (виконайте наступне в командному рядку). Потрібен Git.
git clone --depth 1 git: //github.com/joyent/node.git CD-вузол git checkout v0.4.11 export JOBS = 2 mkdir ~ / local ./configure --prefix = $ HOME / local / node make make install echo 'export PATH = $ HOME / local / node / bin: $ PATH' >> ~ / .profile echo 'експортувати NODE_PATH = $ HOME / local / node: $ HOME / local / node / lib / node_modules' >> ~ / .profile джерело ~ / .profile
Варіант 2. Встановлення Node.js з пакета
Для користувачів Mac ви можете встановити Node.js як пакет з https://sites.google.com/site/nodejsmacosx/, який досить очевидний.
Монтаж вузлів тестування
Щоб перевірити успішну установку Node, ми можемо спробувати дуже просту консольну програму "Hello World". Створити файл з ім'ям "test.js"і впишіть у нього наступний код.
var sys = require ("sys"); sys.puts ("Hello World");
Пояснення коду:
Він завантажує sys
класу в змінну sys
. Потім він використовує sys
Об'єкт для виконання консольних завдань. The sys.puts
є командою, подібною до cout
у C ++, тому, щоб запустити вищезазначений сценарій, перейдіть до командного рядка і запустіть його за наведеною нижче командою:
node test.js
Якщо ваша установка успішна, то на екрані з'явиться вітальний світ.
Створення сервера HTTP
Тепер настав час створити "Hello World" через веб-сервер, використовуючи Node.js. Ось що ми збираємося робити - ми створити сервер, який виводить a “Привіт Світ” до локального хоста на порт 8080 незалежно від того, що URL, дає вам уявлення, що події є.
Коди:
var sys = require ("sys"), my_http = require ("http"); my_http.createServer (функція (запит, відповідь) sys.puts ("Мене вигнали"); response.writeHeader (200, "Content-Type": "text / plain"); reply.end ();) слухати (8080); sys.puts ("Сервер, запущений на 8080");
Пояснення коду:
Найбільш цікавою частиною в Node.js є програмування на основі подій. Для того, щоб створити HTTP-сервер, нам знадобиться Бібліотека HTTP, тому ми йдемо вперед і додаємо його за допомогою my_http
. Створюємо сервер за допомогою функції:
my_http.createServer (функція (запит, відповідь) ). слухати (8080);
Виконується функція, задана як перший аргумент при кожному запуску події в порт 8080, тому функція сама пропонує вузлу прослуховувати подію в порт 8080. Щоб виявити це, я додав a “Мене вигнали” повідомлення, яке буде відображатися на екрані консолі кожного разу, коли буде отримано запит.
The запит
об'єкт містить всю інформацію про запит, зроблений на сервер. Наприклад, він містить рядок URL. The відповідь
Об'єктом є об'єкт, який обробляє відповідь від сервера. Спочатку задаємо заголовок відповіді як a text / plain
зміст, потім виходи “Привіт Світ“, потім завершити вихідний потік. 200 є відповідь статусу.
Ну, вище, це дуже простий приклад, але ми бачимо, що будь-яку URL, яку ми надаємо в браузері для того ж самого сервера, ми отримуємо такий самий вихід, як “Привіт Світ”.
Створення простого статичного файлового сервера
Давайте створимо простий статичний файловий сервер у наступному навчальному посібнику.
Коди:
var sys = require ("sys"), my_http = require ("http"), path = require ("шлях"), url = require ("url"), filesys = require ("fs"); my_http.createServer (функція (запит, відповідь) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); ) if (! exist) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 Not Found"); filesys.readFile (full_path, "binary", функція (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + reply.end (); else відповідь.writeHeader (200); response.write (файл, "двійковий"); response.end ();););). слухати (8080); sys.puts ("Сервер, запущений на 8080");
Пояснення кодів:
Наведений вище код досить простий, ми обговоримо його як блоки.
var sys = require ("sys"), my_http = require ("http"), path = require ("шлях"), url = require ("url"), filesys = require ("fs");
Всі ці бібліотеки потрібні для програми. Його використання буде зрозуміло в наступному коді.
var my_path = url.parse (request.url) .pathname; var full_path = path.join (процес.cwd (), my_path);
The запит
Об'єкт має деталі запиту, як ми обговорювали раніше. Ми використовуємо розбирати
функція класу URL, яку ми включили для отримання pathname
URL-адреси запиту. Після отримання шляху ми об'єднуємо його з контуром поточного робочого каталогу, щоб отримати повний шлях до файлу.
Для приєднання URL-адрес ми називаємо функцію приєднатися
у бібліотеці шляхів.
path.exists (full_path, функція (існує)
Після отримання повного шляху ми перевіряємо, чи існує шлях за функцією існує
. Після завершення перевірки функція зворотного виклику викликається і передається як другий аргумент.
if (! exist) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 Not Found"); response.end (); else filesys.readFile (full_path, "binary", функція (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); err + "n"); response.end (); else відповідь.writeHeader (200); response.write (файл, "двійковий"); response.end (););
Тепер у функції зворотного виклику, якщо файл не існує, ми надсилаємо404 Сторінку не знайдено"помилка.
Якщо знайдено сторінку, ми читаємо файл за допомогою readFile
функції у файловій системі. Також ми можемо бачити функцію зворотного виклику для readFile
Функція визначена там сама. Якщо при читанні файлу немає помилки, вона відобразиться. Якщо виникла помилка, то статус 500 повертається з текстом помилки.
Я також рекомендую перенести коди попереднього підручника у функцію, щоб ви могли використовувати її в наступному навчальному посібнику або для подальшого використання.
var sys = require ("sys"), my_http = require ("http"), path = require ("шлях"), url = require ("url"), filesys = require ("fs"); my_http.createServer (функція (запит, відповідь) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); ) if (! exist) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 Not Found"); filesys.readFile (full_path, "binary", функція (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + reply.end (); else відповідь.writeHeader (200); response.write (файл, "двійковий"); response.end (););); my_http. createServer (функція (запит, відповідь) var my_path = url.parse (request.url) .pathname; load_file (my_path, response);). listen (8080); sys.puts ("Сервер, запущений на 8080");
Залишайтеся з нами !
Це все. Сподіваюся, що це дасть вам гарне уявлення про Node.js. У наступній статті я покажу вам, як це зробити завантажувати та відображати кількість Facebook любить використовувати Node.js. Залишайтеся з нами!
Примітка редактора: Цей пост написано Гео Павло для Hongkiat.com. Geo є незалежним розробником Web / iPhone, який любить працювати з PHP, Codeigniter, WordPress, jQuery і Ajax. Він має 4-річний досвід роботи в PHP та 2 роки досвіду розробки додатків iniPhone.