Ръководство за начинаещи на Node.js (JavaScript от страна на сървъра)
Node.js - с прости думи - е JavaScript от страна на сървъра. В наши дни тя получава много бръмча. Ако сте чували за него или сте заинтересувани да научите и да получите някои ръце върху него - този пост е за вас.
И така, какво точно е необходимостта от използването на JavaScript в сървъра? За да направим концепцията за Node.js ясна, бих искала да я сравня с обикновените сървърни езици като PHP. Node.js използва процедура за изпълнение на сървър на базата на събития вместо многопоточното изпълнение в PHP.
За да го обясним по-нататък, ще говорим за идеята какво е Node.js заедно с някои предложения за хостинг доставчик и съвети за инсталиране. Необходими са средно ниво на познаване на JavaScript, jQuery и Ajax, но ние също ще ви дадем примери, за да разберете всичко по-лесно и дори да работите върху него, така че нека да научим повече за Node.js!
Нека разгледаме случай:
Помислете за уеб сайт, в който трябва да зареждате съдържанието динамично от друг уеб сървър, който е бавен. В PHP можете да го направите по два начина - кодиране в прост файл и кодира го като друг скрипт, тогава изпълнявайки го с многонишков подход.
При първия метод, въпреки че кодът е прост изпълнението за известно време спира в точката, където се осъществява достъпът до бавния уеб сървър. Вторият метод е по-оптимизирани в случай на изпълнение но е трудно да се кодира и има натрупване на управление с много нишки. Случаят е подобен за повечето езици за уеб програмиране, различни от JavaScript от страна на сървъра, т.е. Node.js.
Каква е разликата в Node.js? За да разберете Node.js, трябва да имате предвид Програмиране на събития на JavaScript в браузъра. Тук използваме същата технология. Вместо да се използва отделна нишка, а функцията е прикрепена към крайното събитие от “бавен достъп до уеб сървъра” по-горе, по този начин ще получите пълна функционалност в оптимизирания втори вариант, споменат по-горе, без никакви режими за много нишки.
Първи стъпки с Node.js
Node.js е JavaScript. Защо не можем да използваме функционалността на JavaScript на базата на събития в клиентския сървър? Тази мисъл може да доведе до развитието на Node.js.
Това е основният акцент на Node.js - това са асинхронни функции, базирани на събития. Използва се цикъл на събитието вместо да чакат за I / O операции (достъп до външна уеб услуга, достъп до хардуер).
Node.js все още можеше използва своята процесорна мощ когато сървърът чака всяка друга операция. Това прави Node.js мащабируема до милиони едновременни връзки.
Как се изпълнява JavaScript на сървър?
Node.js работи с v8 среда - това е a виртуална машина или a Двигател на JavaScript който изпълнява JavaScript кода, така че за хостинг не можете да използвате обикновените уеб хостове. Ще ви трябват тези, които имат v8 среда.
Ето някои предложения на доставчика за хостинг на Node.js:
- Облачна леярна
- Cloudnode
- DotCloud
- Duostack
Инсталиране на Node.js
Node ще работят перфектно на операционни системи Linux, Macintosh и Solaris. В Windows можете да го инсталирате с помощта на слоя Cygwin емулация. Никое от вградените в Windows не е задоволително, но все още е възможно да се изпълни нещо.
Вариант 1: Изграждане на възел от източник.
употреба правя
за изграждане и инсталиране на node.js (изпълнете следното в командния ред). Изисква се Git.
git clone - дебит 1 git: //github.com/joyent/node.git cd възел git checkout v0.4.11 износ 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 source ~ / .profile
Опция 2: Инсталиране на Node.js от пакета
За потребители на Mac можете да инсталирате Node.js като пакет от https://sites.google.com/site/nodejsmacosx/, което е доста очевидно.
Инсталиране на възел за тестване
За да проверим успешната инсталация на Node, можем да изпробваме една много проста конзолна програма "Hello World". Създайте файл с име "test.jsи напишете следния код в него.
var sys = require ("sys"); sys.puts ("Здравей свят");
Обяснение на кода:
Той зарежда сис
клас в променлива сис
. След това използва сис
обект за изпълнение на конзолните задачи. Най- sys.puts
е команда, подобна на Cout
в C ++, така че за да изпълните скрипта по-горе, отидете в командния ред и го стартирайте с командата по-долу:
node test.js
Ако инсталацията ви е успешна, на екрана ще получите изход за света.
Създаване на HTTP сървър
Сега е време да създадете "Hello World" чрез уеб сървър, използвайки Node.js. Ето какво ще направим - ние създайте сървър, който извежда a “Здравей свят” на localhost на порт 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 “Бях изритан” съобщение, което ще се покаже на екрана на конзолата при всяко получаване на заявка.
Най- поискване
обектът съдържа цялата информация за заявката, направена на сървъра. Например съдържа URL низа. Най- отговор
обектът е обектът обработва отговора от сървъра. Първо задаваме заглавието на отговора като текст / обикновен
съдържание, след това изходи “Здравей свят“, след това прекратете изходния поток. 200 е отговорът за състоянието.
Е, горният е много прост пример, но можем да видим, че какъвто и да е URL адресът, който даваме в браузъра за същия сървър, получаваме същия изход като “Здравей свят”.
Създаване на прост статичен файлов сървър
Нека създадем прост статичен файлов сървър в следващия урок.
Кодовете:
var sys = require ("sys"), my_http = require ("http"), path = require ("path"), 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); path.exists (пълен път, функция (съществува) ) if (! exist) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 не е намерен"); filesys.readFile (full_path, "binary", функция (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.end (); else response.writeHeader (200); response.write (файл, "двоичен"); response.end ();););). слушате (8080); sys.puts ("Сървър, работещ на 8080");
Обяснение на кодове:
Горният код е доста прост, ще го обсъдим като блокове.
var sys = require ("sys"), my_http = require ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs");
Всички тези библиотеки са необходими за програмата. Използването му ще бъде ясно в следния код.
var my_path = url.parse (request.url) .pathname; var full_path = path.join (процес.cwd (), my_path);
Най- поискване
обектът има детайлите на искането, както сме обсъждали по-рано. Ние използваме разбор
функцията на URL класа, който сме включили, за да получи името на пътя
на URL адреса на искането. След като получим името на пътя, свързваме го с пътя на текущата работна директория, за да получим пълния път на файла.
За присъединяване към URL адреси имаме функция, наречена присъедините
в библиотеката на пътя.
path.exists (full_path, съществува функция ()
След като получим пълния път, проверяваме дали пътеката съществува от функцията съществува
. След приключване на проверката се извиква функцията за обратно извикване и се предава като втори аргумент.
ако (! съществува) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 не е намерен"); response.end (); else filesys.readFile (full_path, "binary", функция (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); err + "n"); response.end (); else response.writeHeader (200); response.write (файл, "двоичен"); response.end (););
Сега в функцията за обратно извикване, ако файлът не съществува, ние изпращаме "404 Страницата не е намерена"грешка.
Ако страницата е намерена, четем файла ReadFile
функция във файловата система. Можем да видим и функцията за обратно извикване за ReadFile
дефинирана там функция. Ако няма грешка при четене на файла, той ще се покаже. Ако има грешка, статус 500 се връща с текста на грешката.
Също така препоръчвам опаковане на кодове от предишния урок във функция, така че да можете да я използвате в следващия урок или за бъдеща употреба.
var sys = require ("sys"), my_http = require ("http"), path = require ("path"), 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); path.exists (пълен път, функция (съществува) ) if (! exist) response.writeHeader (404, "Content-Type": "text / plain"); response.write ("404 не е намерен"); filesys.readFile (full_path, "binary", функция (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.end (); else response.writeHeader (200); response.write (файл, "двоичен"); response.end (););); my_http. createServer (функция (заявка, отговор) var my_path = url.parse (request.url) .pathname; load_file (my_path, response);). слушайте (8080); sys.puts ("Server Running on 8080");
Останете на линия !
Това е всичко. Надявам се, че това ви дава добра идея за Node.js. В следващата статия ще ви покажа как натоварване и показване на броя на Facebook харесва използването на Node.js. Останете на линия!
Бележка на редактора: Тази публикация е написана от Гео Пол за Hongkiat.com. Geo е независим разработчик на уеб / iPhone, който работи с PHP, Codeigniter, WordPress, jQuery и Ajax. Той има 4-годишен опит в PHP и 2 години опит в разработката на iniPhone приложения.