Почетна » Цодинг » Водич за почетнике за Ноде.јс (ЈаваСцрипт на страни сервера)

    Водич за почетнике за Ноде.јс (ЈаваСцрипт на страни сервера)

    Ноде.јс - једноставним речима - јесте ЈаваСцрипт на серверу. Ових дана добијало је много буззова. Ако сте чули за то или сте заинтересовани за учење и добивање неких руку - овај пост је за вас.

    Дакле, шта је тачно потреба за коришћењем ЈаваСцрипт-а на серверу? Да би концепт Ноде.јс био јасан, желео бих да га упоредим са обичним серверским језицима као што је ПХП. Ноде.јс користи поступак извршења сервера заснованог на догађају радије него мултитхреадед извршење у ПХП-у.

    Да бисмо то даље објаснили, говорићемо о идеји шта је Ноде.јс заједно са неким сугестије провајдера хостинга и савети за инсталацију. Потребна су средња знања из ЈаваСцрипта, јКуери-а и Ајак-а, али ћемо вам дати и примере да лакше разумете целу ствар, па чак и да радите на њој, па хајде да сазнамо више о Ноде.јс!

    Размотримо случај:

    Размислите о веб локацији на којој је потребно динамички учитавати садржај са другог веб сервера који је спор. У ПХП-у то можете да урадите на два начина - шифрирање у једноставном фајлу и кодирајући га као други скрипт, онда извршавајући га у мултитхреадед приступу.

    У првој методи, иако је код једноставан Извршење застаје неко време на месту где се приступа спором веб серверу. Други метод је оптимизованије у случају перформанси али то је тешко кодирати и има вишеструку управу над главом. Случај је сличан за већину других језика за програмирање на Вебу, осим ЈаваСцрипт-а на страни сервера, тј. Ноде.јс.

    У чему је разлика у Ноде.јс? Да бисте разумели Ноде.јс морате имати на уму ЈаваСцрипт програмирање засновано на догађајима у прегледнику. Ту исту технологију користимо. Уместо да користите засебну нит, а функција је прикључена на завршни догађај од “спор приступ веб серверу” горе поменуто, тако добијате пуна функционалност у оптимизованој другој опцији која је горе поменута без мултитхреад режима.

    Почетак рада са Ноде.јс

    Ноде.јс је ЈаваСцрипт. Зашто не можемо користити функционалност ЈаваСцрипта засновану на догађајима у клијенту на серверу? Ова мисао је можда довела до развоја Ноде.јс.

    То је главни нагласак Ноде.јс - то су асинхроне функције засноване на догађајима. Користи се евент лооп уместо чекања И / О операција (приступ спољном веб сервису, приступ хардверу).

    Ноде.јс још увек може користи своју процесну снагу када сервер чека било коју другу операцију. Ово чини Ноде.јс сцалабле на милионе истовремених веза.

    Како се ЈаваСцрипт покреће на серверу?

    Ноде.јс ради на в8 окружењу - то је Виртуелна машина или а ЈаваСцрипт енгине који покреће ЈаваСцрипт код, тако да за хостинг не можете користити обичне веб хостове. Биће вам потребни они који имају в8 енвиронмент.

    Ево неких предлога добављача за Ноде.јс хостинг:

    1. Цлоуд Фоундри
    2. Цлоудноде
    3. ДотЦлоуд
    4. Дуостацк

    Инсталирање Ноде.јс

    Чвор ће савршено функционишу на оперативним системима Линук, Мацинтосх и Соларис. На Виндовс-у га можете инсталирати користећи Цигвин слој емулације. Ниједна од инсталација у Виндовсу није задовољавајућа, али је још увијек могуће покренути нешто.

    Опција 1: Изградња чвора из извора.

    Усе направити за изградњу и инсталацију ноде.јс (извршите следеће у командној линији). Потребан је Гит.

     гит цлоне --дептх 1 гит: //гитхуб.цом/јоиент/ноде.гит цд ноде гит цхецкоут в0.4.11 екпорт ЈОБС = 2 мкдир ~ / лоцал ./цонфигуре --префик = $ ХОМЕ / лоцал / ноде маке маке инсталл ецхо 'екпорт ПАТХ = $ ХОМЕ / лоцал / ноде / бин: $ ПАТХ' >> ~ / .профиле ецхо 'извоз НОДЕ_ПАТХ = $ ХОМЕ / лоцал / ноде: $ ХОМЕ / лоцал / ноде / либ / ноде_модулес' >> ~ / .профиле соурце ~ / .профиле 

    Опција 2: Инсталирање Ноде.јс из пакета

    За кориснике Мац-а, можете инсталирати Ноде.јс као пакет са хттпс://ситес.гоогле.цом/сите/нодејсмацоск/ који је прилично разумљив.

    Тестирање инсталације чвора

    Да бисмо проверили Вашу успешну инсталацију чвора, можемо испробати веома једноставан програм "Хелло Ворлд". Направите датотеку под називом "тест.јс"и упишите сљедећи код у њега.".

     вар сис = рекуире ("сис"); сис.путс ("Хелло Ворлд"); 

    Објашњење кода:

    То учитава сис класа у варијаблу сис. Затим користи сис објекат за извршавање задатака конзоле. Тхе сис.путс је наредба слична оној цоут у Ц ++, тако да бисте покренули горњу скрипту, идите у командну линију и покрените је помоћу наредбе испод:

     ноде тест.јс 

    Ако је ваша инсталација успешна онда ћете на екрану добити светски излаз.

    Креирање ХТТП сервера

    Сада је време да направите "Хелло Ворлд" преко веб сервера користећи Ноде.јс. Ево шта ћемо урадити - ми креирајте сервер који излази а “Здраво Свете” на лоцалхост на порту 8080 без обзира на УРЛ, дајући вам идеју шта догађај је.

    Кодови:

     вар сис = рекуире ("сис"), ми_хттп = рекуире ("хттп"); ми_хттп.цреатеСервер (функција (захтјев, одговор) сис.путс ("добио сам ударац"); респонсе.вритеХеадер (200, "Цонтент-Типе": "тект / плаин"); респонсе.врите ("Хелло Ворлд") респонсе.енд ();). листен (8080); сис.путс ("Сервер Руннинг он 8080"); 

    Објашњење кода:

    Најзанимљивији део Ноде.јс је програмирање засновано на догађајима. Да бисмо направили ХТТП сервер потребан нам је ХТТП либрари, тако да идемо напријед и додамо га ми_хттп. Креирамо сервер по функцији:

     ми_хттп.цреатеСервер (функција (захтев, одговор) ). 

    Функција дата као први аргумент се извршава сваки пут када се догађај покрене у порту 8080, тако и сама функција предлаже да чвор слуша за догађај у порту 8080. Да бих то открио, додао сам “Избацили су ме” порука која ће бити приказана на екрану конзоле сваки пут када се прими захтев.

    Тхе захтев објекат садржи све информације о захтеву који је направљен на серверу. На пример, он садржи УРЛ адресу. Тхе одговор објекат је предмет који обрађује одговор од сервера. Прво поставимо заглавље одговора као а тект / плаин садржај, затим излазе “Здраво Свете“, затим завршите излазни ток. 200 је одговор на статус.

    Па, горњи је веома једноставан пример, али можемо да видимо да који год УРЛ дајемо у претраживачу за исти сервер добијамо исти излаз као “Здраво Свете”.

    Креирање једноставног статичког фајл сервера

    Хајде да креирамо једноставан статички сервер датотека у следећем водичу.

    Кодови:

     вар сис = рекуире ("сис"), ми_хттп = рекуире ("хттп"), патх = рекуире ("патх"), урл = рекуире ("урл"), филесис = рекуире ("фс"); ми_хттп.цреатеСервер (функција (захтев, одговор) вар ми_патх = урл.парсе (рекуест.урл) .патхнаме; вар фулл_патх = патх.јоин (процесс.цвд (), ми_патх); патх.екистс (фулл_патх, фунцтион (екист) ) иф (! екист) респонсе.вритеХеадер (404, "Цонтент-Типе": "тект / плаин"); респонсе.врите ("404 Нот Фоунд"); филесис.реадФиле (фулл_патх, "бинари", функција (ерр, филе) иф (ерр) респонсе.вритеХеадер (500, "Цонтент-Типе": "тект / плаин"); респонсе.врите (ерр + респонсе.енд (); елсе респонсе.вритеХеадер (200); респонсе.врите (филе, "бинари"); респонсе.енд ();););). послушај (8080); сис.путс ("Сервер Руннинг он 8080"); 

    Објашњење кодова:

    Горњи код је прилично једноставан, расправићемо га као блокове.

     вар сис = рекуире ("сис"), ми_хттп = рекуире ("хттп"), патх = рекуире ("патх"), урл = рекуире ("урл"), филесис = рекуире ("фс"); 

    Све ове библиотеке су потребне за програм. Његова употреба ће бити јасна у следећем коду.

     вар ми_патх = урл.парсе (рекуест.урл) .патхнаме; вар фулл_патх = патх.јоин (процесс.цвд (), ми_патх); 

    Тхе захтев објекат има детаље захтева као што смо раније дискутовали. Ми користимо парсе функција класе УРЛ-а коју смо укључили да бисмо добили патхнаме УРЛ-а захтева. Након добијања имена стазе, спојимо је са путањом тренутног радног директоријума да бисмо добили пуну путању датотеке.

    За спајање УРЛ-ова имамо функцију која се зове придружити у библиотеци стаза.

     патх.екистс (фулл_патх, функција (постоји)  

    Након добијања пуне стазе проверавамо да ли пут постоји по функцији постоји. Након што је провера обављена, цаллбацк функција се позива и просљеђује као други аргумент.

     ако (! постоји) респонсе.вритеХеадер (404, "Цонтент-Типе": "тект / плаин"); респонсе.врите ("404 Нот Фоунд"); респонсе.енд ();  елсе филесис.реадФиле (фулл_патх, "бинари", функција (ерр, филе) иф (ерр) респонсе.вритеХеадер (500, "Цонтент-Типе": "тект / плаин"); ерр + "н"); респонсе.енд (); елсе репли.вритеХеадер (200); респонсе.врите (филе, "бинари");  

    Сада у функцији повратног позива ако датотека не постоји, шаљемо "404 Страница није пронађена"еррор.

    Ако је страница пронађена онда читамо датотеку од стране реадФиле у датотечном систему. Такође можемо видети функцију повратног позива за реадФиле дефинисана сама функција. Ако нема грешке у читању датотеке онда ће се приказати. Ако постоји грешка, онда се статус 500 враћа са текстом грешке.

    Такође препоручујем кодирање претходног туториала у функцију тако да је можете користити у наредном водичу или за будућу употребу.

     вар сис = рекуире ("сис"), ми_хттп = рекуире ("хттп"), патх = рекуире ("патх"), урл = рекуире ("урл"), филесис = рекуире ("фс"); ми_хттп.цреатеСервер (функција (захтев, одговор) вар ми_патх = урл.парсе (рекуест.урл) .патхнаме; вар фулл_патх = патх.јоин (процесс.цвд (), ми_патх); патх.екистс (фулл_патх, фунцтион (екист) ) иф (! екист) респонсе.вритеХеадер (404, "Цонтент-Типе": "тект / плаин"); респонсе.врите ("404 Нот Фоунд"); филесис.реадФиле (фулл_патх, "бинари", функција (ерр, филе) иф (ерр) респонсе.вритеХеадер (500, "Цонтент-Типе": "тект / плаин"); респонсе.врите (ерр + респонсе.енд (); елсе респонсе.вритеХеадер (200); респонсе.врите (филе, "бинари"); репли.енд (););); ми_хттп. цреатеСервер (фунцтион (рекуест, респонсе) вар ми_патх = урл.парсе (рекуест.урл) .патхнаме; лоад_филе (ми_патх, респонсе);). листен (8080); сис.путс ("Сервер Руннинг он 8080"); 

    Будите у току !

    То је све. Надам се да вам ово даје добру идеју о Ноде.јс. У следећем чланку ћу вам показати како учитавање и приказивање броја Фацебоока воли да користи Ноде.јс. Будите у току!

    Напомена уредника: Овај пост је написао / ла Гео Паул фор Хонгкиат.цом. Гео је независни Веб / иПхоне девелопер који ужива у раду са ПХП, Цодеигнитер, ВордПресс, јКуери и Ајак. Има 4 године искуства у ПХП-у и 2 године искуства у развоју иИПхоне апликација.