>> Реду.
Дакле Цлиффхангер био, шта је Ноде.јс како ви то знате данас?
Било шта? Да?
>> Било је као оквир писање ЈаваСцрипт
апликације широко -
>> ОК, то ради.
>> - Знам као заједнички користи као -
или нешто вам може да уради је као -
[Нечујно Напомена]
>> Добро добро.
Да, па то је оквир.
То је мотор којим сте може да извршава ЈаваСцрипт код
сервер сајта.
То може да значи најједноставније ствари
као писање командне линије скрипта није у Питхон или Басх
или Руби или ПХП, али само у самом ЈаваСцрипт
и извршавање га на трепери командну линију.
Или ви заиста можете да покренете она унутар веб сервера.
А у ствари, у Ноде.јс сама,
ово је оквир гомила библиотека међу којима су
у ХТТП сервера уграђени.
Дакле, ви у ствари можете писати сервера као што ћемо видети
у само једном тренутку, супер лако од само у разумевању мало
ХТТП и ТЦП и лукама.
И ви можете мресте слушање Апацхе веб сервер без,
без Мицрософта ИИС.
Без било који други инсталиран софтвер,
можете само мресте ово и слушати највише било порт
на систему који ти дозвољено да.
Дакле случај и поена, пусти ме и отворите
се овом примеру, сервер-0.јс.
Дакле, приметите да врх овај фајл, само гомила
од незанимљив коментара, а онда је пар
репрезентативних линија кода да ћемо видети рецуррингли.
Дакле, вар ХТТП добија захтевају "хттп".
Дакле, уграђени на Ноде.јс ' инфраструктура је цела гомила
од модула који су заправо само библиотеке и све је некако
од имена са простора јединствени идентификатор
овако је "ХТТП".
Тако да као у многим језици као што су Јава и Ц + +
и Ц, само ти кад увоз или укључују
или у чвор говори захтевају модул ради његове делове.
И сви меморија захтева се учита
у РАМ и стога се користи.
Дакле, ви некако учитате ово библиотеке или модула на захтев.
То значи ићи напред и захтевају
за овај програм ХТТП библиотека,
и односе се на тој библиотеци начин променљиву зове ХТТП.
Али овај симбол леви могао су позвани нешто, трла,
бар, Баз, није битно.
Дакле, за разлику од Ц + + и Јава и Ц где када вам је потребна
или увоз библиотеку, то је само врста
од постаје глобално доступан,
Ноде.јс модули су чвршће намеспаце.
Тако да сами - да функционалност је само доступне у овом тренутку
путем овог име променљиве.
Ви не можете започети тек куцање методе које постоје
у њему право начин што је вероватно добра,
јер онда ваш простор имена не добија скоро као претрпан
као у много језика.
У реду, тако да сада као заједнички сугеришу, стварајући ХТТП сервер
Јонатхан [претпоставља правопис] било могуће је буквално
једноставно као позивање створити метод сервера унутра
од ХТТП модула.
Дакле, ово је враћа референца
на неку врсту веб сервера.
Он је дошао до Апацхе, не нужно као тешке телесне.
Ово је мало једноставније.
И сад, ја имам само једноставно урадите неколико ствари.
Дакле, прво, дозволите ми дођите доле на дну овде
и прескочите руковалац метод за тренутак.
И приметио ову линију кода,
сервер.он који је у суштини значи сервера -
слушати као у јКуери кода,
слушати за састанак зове захтев
и само да претпоставите Шта да радим
када захтев догађај пожари у серверу.
Да?
>> Позовите функцију руковалац.
Дакле, буквално извршава код који је означен
од ове променљиве и заправо не променљива за симбол овде,
шта је то симбол мислили?
Па, овај назив функционишу овде
и претовар очигледно узима два аргумента.
Зашто два? Па, ако сте управо прочитајте никакву документацију
за овом модулу, ти ће бити речено да руковалац
који ће бити покренут ће бити прошло најмање два аргумента,
позивање на захтев,
и унутар захтеву ми буквално значи ХТТП захтев.
Дакле, сви они ХТТП заглавља да би се сећате
од почетка семестар или неки прије класа
или искуство као добити линију и линију домаћина
и Усер-Агент линија, све то је кућиште и више унутра
овог захтева објекта.
А одговор је објекат сортирано за одлазне податке.
Дакле, имате референцу на објекат који ће вам омогућити
да пошаље информације назад у претраживач позивом метода
на том другом аргументу Рес, позвао на одговор.
Али, то би се могло назвати трла или бар, ово су само конвенције.
Па сад, шта да радим?
Па, изгледа да унутра ове супер једноставне веб сервера
да сам спроводи, ја сам да уради следеће.
Ја ћу писати ХТТП хеадер са кодом статуса 200,
200 значење реду, све је добро.
И онда, ја идем да прође на очигледно.
Шта је тип података Други аргумент у правој глави?
>> То је објекат?
>> То је објекат са колико кључеви и вредности?
Само један од сваког, десно, један кључни вредност пара.
Дакле, 'тип садржаја ".
И једини разлог Ја га цитирам овде
јер цртица може бити спојени за знак минус
или нешто слично.
Дакле, ја морам да га цитирам овде, спржити или двоструки наводници.
Али опет заједнички парадигма
у ЈаваСцрипт коду је често једноструке наводнике ових дана,
дебелог црева, а затим вредности.
Дакле, ово је само такозвани тип ум.
Ово је ХТТП заглавље да се буквално иде
да будем задовољан тип цртица дебелог текст коса црта јасно да ће
да буде послат из сервера на претраживачу
тако да претраживач зна да ли да покренем овај текст као Рав
или ХТМЛ или као слика или филм
или флеш фајл или било шта друго.
Сада, где сам заправо желе да пошаље у телу странице?
Па, само читање документација
за објекат одговор унутар ове библиотеке.
Видим да има право метод и да узима стринг,
можда других ствари, али минимално ниска.
И низ је оно што је испљунути на претраживачу.
У овом случају његов супер једноставан, њен свет здраво,
али то може бити опне носач, ХТМЛ, затворена заграда,
отворен носач глава, близу носач и тако даље,
ово би могао бити Сирова ХТМЛ.
Али држимо пример једноставна за само пљување
од најједноставнијих типова умних који је вероватно текст / плаин.
И онда само респонсе.енд значи раскинете везу
и послати све што имам врста пуферованим унутра
овог објекта назад на претраживачу.
Завршио сам. У реду.
Дакле, последња ствар Ја радим овде доле
и то је донекле произвољно и требало да буде кул,
се ја говорим Сервер коначно да слушају
на одређеном ТЦП по дефаулт порт.
Подсетимо од почетка од класа које услуге -
или сте обично јединствено идентификују се по бројевима,
АД је веб, 443 је заснован ХТТП сајтова, 22 је ССХ, 21 је ФТП
и 1337 је само произвољна али то је више него 1024
што значи на већини системи, ја могу да га користим
без потребе супер усер привилегије.
Дакле, то је само згодно.
Али 8080 је у офф - заједнички један, 8088, стварно нешто велико
у хиљадама као заједнички али то је само још елита.
Добро, па шта се дешава када сам заправо покренути ово?
Па, ја не само посетите страна у браузеру.
Ова датотека се зове сервер-0.јс.
Јер опет, Апацхе је сада из слике
за другу половину курса.
Ако желим да веб сервера, морам да напишем
а затим покрените ову веб сервер.
Али испоставља се да ЈаваСкрипт како на страни клијента
и сервера страна је тумачити језик.
Дакле, све што треба је преводилац.
Дакле, то је - ако инсистирају да покренете чвор и онда сервер-0.јс,
Ја могу или не могу да виде неки излаз у зависности
на шта библиотеке сам укључен, ништа изгледа да се дешава.
Али, дозволите ми да одем на претраживач и пусти ме
на исту ИП адресу од мојих клијената ЦС50.
Али ово могао само као и да буде мој Мек
или мој ПЦ и онда притисните ентер.
То заиста изгледа као Апацхе.
То је као у именик листинг смо гледали
на у првом полувремену.
Дакле, шта сам урадио погрешно?
Да.
[Нечујно Напомена]
Тачно, зар не?
Дакле, Апацхе и даље слуша на подразумеваном порту 80.
Иако сам могао да променим, Могао бих да га искључите све заједно
али она и даље ради.
Али ови момци могу сигурно коегзистирају.
Ја једноставно морам да стави дебелог 1337 и онда можда
или можда не коса црта на крај да бисте приступили овом порт
да је овај сервер покренут на.
А сад видим да здраво, свет се вратио.
И ја могу погодити релоад као много пута како желим,
то је још увек служи до странице.
Заиста, ако сам отворим Цхроме је инспектор, идите на мрежу
а затим поново целу страницу,
приметите да је заиста то био захтев који је послат.
Ако погледам Рав извору,
приметити мој прегледач шаље све те ствари.
А онда одговор од Сервер је супер једноставна.
Ту је 200.
Ако то није сувише ниско на екрану,
ту је тип садржаја.
А онда Ноде.јс некако аутоматски
за мене је додао датум и све друге ствари
да прегледачи обично очекују.
Дакле, хајде да видимо мало проверу исправности.
Дозволите ми да се вратим у коду у сервер-0.јс и пусти ме -
сваки пут кад одем у руковалац,
дозволите ми да кажем цонсоле.лог.
("Ми смо имали госта! ').
Не треба да компајлирате или нешто слично,
то је тумачи језик.
Па сад, да се вратимо на страна, поново један, два,
три пута и идемо враћа се мој прозор.
И сад видим ово.
Па то је чудно, Видим шест линија.
Занимљиво веб тривиа, зашто Ја се шест захтев не три?
Да?
[Нечујно Напомена]
Да. Дакле, као што можда знате мало глупо икона у врху
бара бровсера који много
од сајтова користи моћ бити Харвард грб,
то може бити лого фирме или нешто слично.
Дакле, прегледачи ових дана врста
од пресумптуоусли чине додатни ХТТП захтев
на скоро сваком сајту који када посетите проверу да ли постоји
подразумевано датотеке зове фавицон.ицо
у истом директоријуму као фајл који сте тражили.
А ако је тако, то ставља икона тамо.
Дакле, све што видимо је управо то.
А у ствари, хајде да видимо да ли можемо могу видети овај уместо типа
се само, "имали смо посету".
Пусти ме само напред и излаз.
И ја само знам ово из гледа документацију.
Ту је власништво унутар Захтев објекат зове УРЛ адреса
која се дешава да се путања
који је захтевао у стварном УРЛ.
Дакле, ако ја поново покрените сервер једноставно поновним чвор
на сервере-0.јс и сада не овај један, два,
три и вратим овде.
Ту је.
Сласх је оно што сам - људски је затражио
у фавицон.ицо је шта прегледач
пресумптуоусли тражи.
Али поента није толико ствари фавицон
али како се управља сервер.
Да?
>> Зашто да има да буде неки захтев?
>> Зашто то има - по природи како ХТТП функционише.
Дакле, може само захтевати ХТТП један фајл у исто време.
Прегледачи може бити паметан ових дана
и задржи ТЦП прикључак отворен.
Ако сте узели ЦС143 или уопште упознати са умрежавање,
тако да можете добити повећање ефикасности
држећи мреже утичница отворен
у изради више ХТТП Захтеви серијски преко њега
али они су један фајл по захтеву.
Дакле, ако посетите нешто као -
Мислим да могу да идем у већина сајтова било.
Ако одете на - хајде да се попните Цхроме је инспектор овде.
То може добити највише попунити странице.
Идите на картицу мрежног и идите на ввв.цнн.цом.
А када посетите цнн.цом, њена страница -
Ваш претраживач прилично атроциоусли чини - и даље броји.
У реду. Најмање 289 ХТТП захтеви поново и поново.
И то је разлог зашто када посетите нарочито преждерао сајтова,
они споро учитавање Због свега
активе они учитава.
Дакле, изгледа да 298.
Можда постоји неки Ајакс дешава у овом тренутку, или неки
имовине само су ниске.
Дакле, сваки од њих је појединац захтев враћам
и даље, напред и назад.
И то је разлог зашто раније, чак и мада ми некако разговарали
о томе нешто изванредном споју где сте ставили ознаку скрипта,
апсолутно чини разлика када имате -
она почне да имате много саобраћаја и много
од фајлова који се тражио.
И сваки од ова представља вероватно слика, медија датотеке,
ЈаваСцрипт фајл, ЦСС фајл или слично.
Дакле, ми смо већ смо до неки 4 мегабајта само
да погледате данашње вести.
Добро питање.
У реду.
Дакле, шта су неки од су позитивних иако?
Добро, знамо како да Веб странице већ са ПХП.
И многи од вас дошао да класа знајући Дјанго
и Питхон или шине са Руби.
Па, зашто нам је потребна још једна језик и инфраструктура?
Шта је Ноде.јс посебно добро ако знате?
[Пауза]
Неки ствар?
Не? Да?
>> Преносе поруку.
>> Дакле, преносећи поруке.
Дакле, то је истина и то је истина за више техничке разлога
и да Ноде.јс и стварно ЈаваСцрипт је посебно
добро одговара асинхрони код,
ако чиме сте креирали илузија
да ради вишеструко ствари одједном.
Дакле, иако су стварно дешава серијски,
заиста у већини случајева, Јава и клијент страни
и сервер страна је сингл навојем.
Што ако узимате 161 или чак 61 значи да је -
овог програма знам,
преводилац може буквално само да једну ствар одједном.
Али ово се није велика за нешто као веб сервер
где можете имати десетине или стотине или чак хиљаде
корисника сви покушавају да приступите страници
у исто време веома.
Па ипак, то сугеришу да им руковање један
након другог после Други посебно ако неки
од тих захтева као што смо видели на ЦНН може захтевати служење
до 300 датотека пре него што чак доћи до следећег корисника
ко жели да види, каже вести.
Ноде.јс боље одговара за окружења као што то.
Јер оно што се дешава је било који спор процес трчање
као читање датотеку са диска или упита базе података или причају
на неком другом мрежном серверу,
који тежи да има кашњење, зар не?
Ако сте узети 61 или 161 посебно све ове врсте
периферних услуга имају тенденцију да буду много спорије
него ради ништа унутар исти РАМ и исти процесор
који кажу да у овом случају сервер заправо ради.
Али оно што је лепо у вези Ноде.јс је да можете -
и ЈаваСцрипт генерално је да можете да урадите нешто
и онда кажу, "Хм, ово иде
да ми узме неколико милисекунди или чак неколико секунди.
Дозволите ми некако трпезе да искључен, " али то није истина процес.
А онда када се то ради ради да споро трчање процес
као отимања редове из базе података или читање датотеке. хтмл
од диска, он ће да се вратимо на мене радије
него ми морају да чекају за то.
Дакле, да би то јасније.
Ово је мој начин тако да је ово више познато.
У реду, тако да је ово Схаке Схацк на тргу.
То је врста заједнички парадигма
за објашњавање асинцхроницити.
То је заправо добар пример зато Схаке Схацк
Укусна и хамбургер су изузетно споро за оно што раде.
Али поента је да су стварно добар у узимање наруџби
и узимајући свој новац након који чекате своју храну.
Дакле, ово је заправо бољи дизајн од алтернативе.
Зато претпоставимо да хода у продавница овако и имаш
на предњој страни линије и ви ставља свој налог и желите
на хамбургер, најбоље што могу реци, потребно је најмање пет
или више минута на заправо добити хамбургер.
Дакле, било би некако лошег пословног модела
ако док сте чекали вашем хамбургер, Алиса [претпоставља правопис]
и Боб [претпоставља правопис] и Чарли [претпоставља правопис]
и сви остали чекања у реду иза тебе
а ви се буквално блокира линија чека вашу храну.
Дакле, очигледно, у Схаке Схацк
и друге брзе хране места не ради ово,
они овако нешто.
Они вам дају сирену.
И они су на неки начин послати вам на вашем путу.
И они те назовем по чинећи ову малу ствар вибрира
или блиц да вашу пажњу.
Дакле, то је буквално шта?
Нешто као Ноде.јс ради.
Ако Ноде.јс или ЈаваСкрипт уопштеније се користи
и програмер је довољно паметан
да схвате, "Знаш шта?
Шта год ми је потребно да урадите праву Овде би могло да потраје неколико
милисекунди или секунди.
Знаш шта?
Пусти ме само напред и не зову га синхроно -
"Да је момак блокирање сви остали у линији, "-
пусти ме само напред и некако склоните
и једноставно себе назове
када је дуго трчање операција заврши. "
И позове наравно алудира у овом случају
на повратни позив функције, референца на цхуцк кода
који ће се извршити када је ваш хамбургер је спреман,
налик овоме имају неке врста функционалности уграђеним
да почне вибрира или зујање када је време за вас
да се зове назад предње линије.
Дакле, шта то Мислим реално?
Па, морамо да раде свој пут горе.
Дакле, дозволите ми да само напред и ово прво.
У сервер-1.јс, пусти ме прво поједноставити код
како бисмо могли да беба кораке ка више убедљив проблема.
То је потпуно исти програм који сам написао раније.
Али шта је промењено?
Постоји нека врста благог синтаксичких разлика
између овог и Верзија 0 малопре.
Шта искочи на ти ако се сећате?
Да Синтија [претпоставља правопис]?
[Нечујно Напомена]
Да. Дакле, сада, имамо линију од функција се преноси унутра
Ми смо стечен ослободити од врсте
од узалудно по имену руковалац функција.
Бескорисно само у да пре чак називајући га на једном месту,
Ја стварно не треба да губити време дајући јој име
и чинећи га теже прочитајте код врха до дна.
Дакле, хајде да прогласи уметнуте је анонимна функција.
И ја радим две друге ствари.
Правим боље Употреба дот нотацији.
Дакле, као у јКуери, много чвора методе могу бити окован заједно.
Тако да када завршите зовете нешто, не морате
да чека на нову линију и позвати други метод,
можете само ланац их заједно.
И тако на овај начин, можемо заиста затегнути ово горе.
Дакле, ово је буквално веб сервер у пет линија
од укупно код разлику -
за разлику од онога што иначе можда треба да урадите да подесите нешто горе.
Ако ја одем у сервер 2. Сада, хајде да урадимо ово.
У серверу 2 - заправо нека је врати се на том серверу 2.
Хајде да сада отвори асинц-0.јс и решавање тог проблема при руци.
Дакле, прво, идемо напред и отворено
до Асинц-0.јс у претраживачу.
Дакле асинц-0, пусти ме Назад на претраживачу.
Хит релоад.
А сада, ово је врста поруке о грешци.
Заиста сам виде 500 у Цхроме инспектора.
Али, дозволите ми да прецизније захтевати хелло.ткт.
У реду. Дакле, ово изгледа да ради.
Дакле асинц-0.јс изгледа да не служе се нешто за црте.
Она нема подршку подразумевани фајл.
Али ако ја изричито захтевати хелло.ткт,
да изгледа да подржавају.
Зашто је то тако?
Па, оно што сам овде отишао
и учињено је имплементиран Супер једноставан веб сервер
који показује где асинцхроницити може бити корисно.
И да се спроводи као што следи.
Прво, ја користим ХТТП модул опет,
али такође ФС који вероватно значи?
У принципу у ЦС, систем датотека.
Ок систем датотека.
Отуда Фортх ФС, фајл систем.
Добро, па шта ово ми дати?
Функционалност у вези са датотеке као геттинг прошло,
отварање фајлова, писање дирецториес, читање директоријуме
и све те ствари.
Тако сада приметити, овај код је исто као пре,
креирати сервер, пролазећи у анонимној функцији.
То је врста произвољно.
Ово није веома безбедан веб сервер.
У ствари, можете да приступите већина било који фајл на мом хард диску
или на серверу је тежак вози извршавањем овај код
јер ја сам само слепо под претпоставком да ћу
да зграби све што корисник тражио у УРЛ.
И ја ћу да префикс га са тачком
тако да сам ја маргинално бити безбедно
говорећи шта год фајл могу Захтев мора да бар почетак
у текућем директоријуму.
Наравно ту је претња овде.
Јер ако они уместо тога укључују шта?
У њиховом путу, они некако могу од решили да се превише.
Тачка, тачка, зар не?
Дакле, ако корисник само стави тачку, тачка у УРЛ, у теорији,
они могли да почну да добијају мој - и рећи фајл лозинке.
Дакле, то није значило да се обезбеди,
то је требало да буде једноставно.
Па ево, ја имам променљиву која је спајање од тачке
који је присутан директоријум и захтев УРЛ адреса
које смо видели пре него што се као сласх или / хелло.ткт.
Тако сада, она добија мало више занимљив.
Прво, приметите дно.
Слушам на исти порт као и раније.
Дакле, прави интересантан Рад је унутар овде.
Сваки пут захтев долази у по природи
овог закона, шта ја то радим?
Зовем фајл метод читања фајл система,
пролази на путу да желим да читам.
А сада, ово је оно што је занимљиво овде,
ово је применом у асинхроног методом.
Ви не можете да добијете повраћај вредност од читања датотеке.
У ствари најаве, постоји без лева израз
са леве стране читање датотеке.
То не врати вредност.
Уместо тога, она позива цаллбацк функционишу када је спреман
да вам врати одговор.
Дакле, опет да буде јасно, док је у прошла,
у многим програмирање језици, ако сте хтели
да прочита списе предмета у тачки ПХП,
фајл доња добити наглашавају садржаја,
имате левој израз у свим вредности после -
пре знака једнакости, то значи да сте додељивање
за ту променљиву повратак вредност те функције.
То можете да урадите да у Ноде.јс, али ви обично имају
да позове експлицитно синхрони верзије функција воле,
Мислим да је прочитао синц фајл или синхронизација читати датотеку.
Заборавио сам како су га назвали.
И да би дао Ви вредност повратак.
Али, ако је датотека на неки даљински систем датотека
или диск је просто природно споро, то би могло потрајати 10 милисекунди
или 2 секунде за тај фајл да се заиста вратити.
У међувремену, ниједан други сајт посетиоци се сервисирају
Ваш вебсит.
Ти блокира.
То је оно што се зове блокирање ИО, улаз / излаз.
Дакле овде, ово је много паметнији.
Јер шта се дешава Ноде.јс
да раде на тумачење је следећи,
то ће позвати метод читања датотеке,
покушајте да се један фајл који је добио пут наведено у вредности П.
А онда, ако и када је спремна да вам врати садржај
од датотеке П, она ће позвати функција чији потпис је
по конвенцији следећи.
Два аргумента, први од који је можда грешка објекат,
капитал Е, то је предмет Грешка се зове или Нулл
ако не постоји таква грешка.
И други аргумент - узети претпоставка - ће бити шта?
То се очигледно зове подаци, али шта је податак конкретније?
Садржај >>?
>> Садржај хелло.ткт у примеру И извукао
у свом прегледачу малопре.
Дакле, другим речима да прочита датотеку и многи Ноде.јс функције
као на не врати вредности.
Зову цаллбацк и проћи
оним што би цаллбацк су традиционално
вратити вредност.
Наопако овог приступа је
да би ви називате прочитајте поднесе Т0.
Повратни функцију може не може назвати један крпељ касније
да тако кажем, на Т, то би се могло назвати Т1000,
хиљада крпеља касније.
Али поента је да Остатак кода у овом фајлу,
ако их одмах би бити извршен док Ноде.јс
и док систем датотека схвати како да читају
који фајл и добити то вратити.
Дакле, направите ово -
тако ефикасно илузија
паралелизма док пустити спорији покренуте процесе није
блокирају важне ствари, део који сервисирања корисницима.
Дакле, како да средим ово?
Ово је веома чест Ноде.јс парадигма.
И постоји само начин да се поједностави ово је видећемо раније заједно.
Прво сам проверио да ли Грешка није нула.
Дакле, ако то није лажна онда је грешка.
Ја не знам шта је то, можда датотека не постоји.
Нисам имао дозволе.
Путања је погрешно.
Било који број ствари може да крене наопако.
За сада, ја ћу да произвољно врати 500
која је унутрашња грешка на серверу.
Нешто је пошло наопако.
Ја стварно не занима да га дијагнозу.
Дакле, хајде да кажем корисник је сломљен.
И онда, ја идем да уради рес.енд,
и то је скраћеница нотација.
Подсетимо да је прошле пут сам рес.врите
а онда сам рес.енд.
Ако желите само да послати једну линију производње,
можете једноставно да урадите све одједном са рес.енд са аргументом,
и да ће послати шта год је порука о грешци
унутар овог објекта на претраживачу.
То је прилично варничење сећам малопре.
Немам појма шта је ово мислио на први поглед.
Али када сам тражио датотека која не постоји -
Упс, морамо да покренете сервер поново.
Када сам тражио датотеку да не постоји, ЕИСДИР,
тако нешто то је директоријум,
ако урадим неки случајни ниска тамо,
очигледно да значи фајл не постоји.
А то је зато што је мој број се једноставно каже да напишете
од год Рав Порука о грешци је,
па не врло корисник пријатан али барем ја то руковање.
Иначе, ако то није био еррор шта ја радим?
Иста ствар као и пре ражњу Повратак на 200 ОК, равница -
тект / плаин тип и ум затим испљунути податке.
И зато ја добијам Садржај хелло.ткт који управо
да потврди да ли сам гледао у хелло.ткт,
то буквално само здраво, свет.
И ако сам променио ово здраво, свет, сачувајте датотеку,
поново покренете сервер, поново учитате страницу.
Сада, ја се ту верзију.
Дакле, ја сам заиста само реимплементед веб сервер
као што је постојала за многе године, али користећи ноде.јс.
Али, можемо да урадимо ово још чисто.
Дозволите ми да отворим асинц-1.јс.
Сада, приметите ја додавши други модул овај пут,
очигледно модул пут.
Сада, ово је добар прилика да погледате
на шта документација изгледа.
Ноде.јс је документација.
Као ПХП мислим да је заправо прилично добро
и равно напред.
Ако одем у Ноде.јс и Гоогле и траже Ноде.јс путу,
шта ћете видети обично је директна веза са УРЛ
да сам ставио овде малопре.
Дакле / АПИ је званични место да иде за документацију.
А шта ћете видети на врху
службене документације нода је све од метода и
или својства унутрашњост овај модул,
од којих се зове придруже.
И придружите је помагач функција који ће ми дозволити
да не гњавити са све плусевима.
И то је додао бонуса као што ћете видети
од докова је такође нормализује добијену путању.
Дакле, ако корисник или имате тачака или дот тачака или било која комбинација
од тих врста релативна стазе, међу Упсидес
спојених методу је да то ће да очисти све што се
и дати вам канонску патх без
од тих тачака или тачака дот.
Дакле, то је добра ствар у опште сигурности за најмање
ако проверу вратити вредност која ја нисам
у овом једноставном случају.
Али ја нисам хтео да га користим.
Дакле, ја сад створити пут којим мало више програмски
са патх.јоин уместо необрађених спајање.
Дакле, то је мало чистији него раније.
И сад приметио сам био мало интелигентнији, а
него само слепо покушати да прочита датотеку,
Идем да се заиста позовите фс.стат.
Дакле, ако сте упознати
са ниским-нивоа Ц функције и Ц, чак и ПХП.
Много библиотека има Ова функција враћа Стат
суштини статистике на фајлу, величина фајла,
дозволе, назив и такве ствари,
и такође имплицитно ако фајл постоји или не,
и ако је фајл или директоријум
или симболички линк или нешто друго.
Тако сада приметио, ја сам зове фс.стат.
А онда очигледно према документацији,
Ја би требало да се вратим у Еррор објекту
Нула или следи од статистика објекат.
Али, хајде да проверимо ово, ноде.јс.фс.
Овде је фајл систем документација.
Дај да видим за статистика.
Има много више функција овде.
Упс, то синхронизација стат, фс.стат.
Дакле овде, то је асинхрони Статистика (2).
То значи, ако запамти од главних страница,
поглавље 2 од главној страници,
то значи да је то буквално само имплементација чвор
ниског нивоа функција система стат.
Дакле, повратни добија два аргументи, грешка и стат
где је стат фс.статс објекат.
Дакле, хајде да видимо шта овај објекат требало да изгледа.
Хајде да кликнете на хипервезу и ја видим то.
Статистика објекат садржи очигледно неки начин помоћник,
је фајл, директоријум је, је гомила других ствари.
То је "је" фајл да ми је стало о у овом конкретном случају.
Дакле, овде идем.
Ако је грешка, онда само да овај пут кауцију
и претпоставити.
Ако постоји грешка, то је Вероватно фајл 404 није пронађен.
То може бити нешто друго
али ја сам био мало лењ овде само да се фокусирамо
на више занимљивих детаља.
Али, за корисника је сврхе, датотека није пронађена,
ако је било било грешка наводећи датотеку.
Иначе, дозволите ми да проверим да ли фајл је заиста стварна фајл.
Дакле, ако то није фајл, она постоји.
Има нешто тамо али то је вероватно директоријум
или можда симболички линк
или нешто друго што је Функи на фајл систему.
У сваком случају, корисник не би требало да га виде.
Па сад, ја ћу само да пљуне
се конвенционално неовлашћено 403.
Али опет само конвенција,
Могао сам користио нешто друго у теорији.
И онда на крају, нека ми покушати да прочита датотеку.
Дакле, дозволите ми скролујте надоле.
А сада приметите ово је место где код може добити мало неуредан,
приметити да зовем фс.реадФиле претицање
у истом путу, исти цаллбацк као прошли пут,
па претходна верзија.
А онда ако бих наћи -
ако ја не могу да нађем, Пљујем од 500.
А ако ја могу да пронађу, шта линија ћемо овде видети?
Идемо да видимо ФИ написати заглавље 200 вероватно
и рес.енд слање стварни подаци.
Али приметио ово.
И ово није показна на најгори могући сценарио.
Али ја имам овај позив стат овде него ја имам неке ствари.
Затим, имам још један асинхрони позив овде,
тако више удубљење.
Дакле, само некако екстраполацију ако можеш одавде.
Какав проблем има тенденцију да се јављају са језик као ЈаваСцрипт
у овом окружењу где немате повратне вредности
већ имате ови цаллбацкс.
И наравно, ово је само стилска ствар чињеница
да држим Увуци.
Али се то на логичан следећи корак.
Претпоставимо да је било један или два или три друге функције
да ми је потребно да се изврши да су по природи асинхрони,
и зато ти некако држати Увуци их руковање,
да их обради, да их обради.
Добијате врсту повратни позив пакао како људи то зову
где је ваш код почиње да се веома широк
и искрено заиста тешко прочитати.
Као што је, ја могу некако једва рећи да је то врста протока
да има ову врсту
од стилски угаони ствар дешава овде.
Дакле, ово није идеалан, јер ово може врло брзо постати
незграпан, иако два асинхрони позиви не
тако велика ствар.
Дакле, могли бисмо то избегли, зар не?
Можда сте осврнуо да Ја мисцлицкед малопре.
У документацији, знате, изгледа да постоји статСинц.
И статСинц не преузима повратни као аргумент.
Потребан је само пут, јер то очигледно шта ради?
Она враћа инстанцу од фс.статс.
Дакле, ово може бити ваш Први инстинкт, зар не?
Поготово ако повратни функције
и асинцхроницити је мало ново за вас, искрено,
Најлакши приступ је вероватно само се проблем избегне све
заједно, да се вратимо за сортирање програмирања ЦС101 стилу
где ви позовите функцију или метод, даје вредност,
позовите функције, враћа вредност,
функција, даје вредност.
И ја могу да користим због тога фс.статСинц
који је буквално исти али то је синхрони верзија
што значи да се враћа вредност.
То не прође вреднују повратни позив.
Али зашто би то вероватно било субоптимална воркароунд да прибегну
у синхроним функцијама?
Да?
[Нечујно Напомена]
Тачно, то траје дуго.
Ти само успорава све доле.
Јер баш као Схаке Схацк или Укусна Бургер, ако су добили ослободити
тих тастере и направио вас, купац стоје на фронту
линије док ваша храна је спремна пре чак узимање редослед
особе иза Ви очигледно
Пут кроз успорава.
Људи почињу остављајући, ви некако скрене пакете.
Можете направити било који број аналогија овде.
Али укратко, то је вероватно није добра ствар
за посао или за сервер.
Дакле, асинхрони код је типично добар најмање
у овом случају, али је дефинитивно почиње да изазове неке Ангст.
А у ствари, усудио бих се рећи, када Први писања ове ствари,
то ћу узети мало мало навикавање.
Па, хајде да почнемо да опреми ти са неким библиотекама
и технике да би ово мало лакше.
Дакле, једна од најчешћих библиотеке су популарне библиотеке
ових дана, овај један зове асинц.јс.
И као пуно Ноде.јс библиотеке или модули,
то су све опен соурце.
Они су готово сви живе и добити вори ризнице која је врста
од постала де факто место за чување ове ствари.
А онда ту је Цела инфраструктура
за инсталирање ове ствари зове НПМ, чвор пакет менаџер
који, ако сте упознати са ЕванТубе је љубазан
од апп или као апп добити.
Ако сте упознати са Ред Хат и Федора
као у апарату, то је као њам.
Али то је чвор - то је менаџер пакет само
за ову околину.
Дакле, можемо преузети и инсталирати ствари као што је асинц библиотеци
а такође још један зове наглашавају библиотеку или модул.
Али ови као далеко фс, ХТТП, стаза,
они су сви дошли подигнута на чвору.
Дакле, ако одемо на АПИ доцс, Ви заправо ћете видети да изграђен
у чвору добијате бесплатно цела гомила модула.
Али много лепих људи на Интернет су направили на десетине
ако не и стотине друге библиотеке
да радимо ствари боље или другачије.
Дакле, хајде да погледамо како ово функционише библиотека.
Дакле, већина овог кода је идентичан за тренутак.
Имам пут Беинг створена одозго.
И сад ја зовем асинц.сериес.
Дакле асинц библиотека, то је само да вам омогућава библиотека
да прође или подигне типично од функције да се зову један
након друге само врсти избегне тај проблем увлачење,
и заиста само ментални ангст које ће неминовно настати
барем када сте први пут зароните у да то сами
са програмирањем асинхроно.
Као у страну, ако сте узели 161 и да си се бавио браве
и подизање услова и све те, асинхроног код
и окружење као Ноде.јс је заправо много,
много једноставније вероватно
него стварно писање мултитхреадед код.
Сваки пут када имате мултитхреадед код,
имате подигне услове.
Ви морате да бринете о две теме које садрже
за истим ресурсима диска или меморије.
Лепота ЈаваСцрипт
у Ноде.јс је ту је буквално само једна нит,
што значи прегледач
или сервера само може урадите једну ствар одједном.
То је само на вама, програмер
да задржи менталну модел за како си некако куеуе ствари
и схватите како да наручите свој код.
Али ви не морате да бринете о подизање услова
у сасвим исти начин на најмање са сировим код овако.
Дакле, то је мало тешко грацк овде.
Али - Па да отворим Доктори за тренутак.
Асинц.јс библиотека које слично је веома гооглеабле,
она живи у ГитХуб поново ставити у саксију као много њих.
Немојте мислити да је назнакама, није.
Дозволите ми идите доле до Прочитај ме овде.
Дакле, асинц библиотека пружа гомилу
метода унутар ње.
На пример, ту је методом која се зове сваки,
који ако кликнете ово само да види своје документе за тренутак,
ово је функција или метод који вам омогућава да урадите нешто
као четири свакој али у паралелно.
Сви одлазе да се деси потенцијално паралелно.
А сваки метод је само ће да се врате у вама када сви
од итерација су потпуни.
Дакле, можда се деси једна за другом.
У идеалном случају, они се десити у суштини паралелно.
Али метод не позвати вас.
То не отвориш свој зујалица док сви
елемената имате понавља више су завршили.
Дакле, то је само леп начин
избегавања коришћења једноставна четири петља
али заправо ради нешто асинхроно.
Али сада више директно у вези са овом примеру,
приметити постоји ово серија метод.
И дозволите ми само попети једноставан канонски пример.
Дакле Асинц библиотеке, серија метод узима у као подразумевало
по угластим заградама у низу.
Који су подаци врсте елемената
у овом низу заснован на једноставан пример?
Ово је низ функција.
Дакле у Ц, ви назвали њих функционишу показиваче.
У ЈаваСцрипт, постоји више правилно референце на функцијама
или анонимне функције.
И то само значи, низови
наравно су наредили од нула на горе.
Дакле, они су задржали поредак који је добар
за серију, јер серија наравно значи учинити нешто
како не паралелно.
Дакле, то само значи да је овај функција ће се извршити,
онда овај, онда ово један, овај, онда овај,
Међутим постоје многи
док коначно опциони повратни се зове.
Дакле, обратите пажњу на парадигму овде.
И мада то је библиотека један момак је,
то је представник Веома чест ЈаваСкрипт парадигма
од поново користећи цаллбацк.
Дакле, обратите пажњу шта ви овде урадите.
У првом функцији чему донет преко овог низа,
сте дефинисали анонимни функција само са функцијом.
Али то очигледно обавештење према овој документацији,
да анонимно функција треба узети аргумент повр.
То ће бити показивач или референца на функцију
да треба да позове када ваше код је спреман да се врати вредност.
Па опет, за разлику од само типично процедурално програмирање
где сте навикли да одмах враћа вредности
онај разлика са користећи библиотеку овако
у асинхроног програмирања више генерално, је када сте спремни
да вратимо вредност из базе података, из датотеке,
из аритметике израз, то је на вама
да позове повратни функцију.
И лепа ствар о овој библиотеци
ако читамо документе још пажљиво је да,
ако и само ако су сви област цаллбацкс зове
без Еррор објекту, ће цела ствар успети?
Другим речима, ако постоје 2,
ако постоје 10 анонимно Функције
у овом низу стога у овој серији,
само ако сви они успети,
ће коначна опциони повратни може сматрати успешним?
Ако неко од њих не, свака функција
након што неће чак бити погубљен.
Дакле, то је леп начин врста поседовања Даиси Цхаин
да прекида прерано ако нешто крене наопако.
Дакле, да видимо то у контексту, овде како бисмо могли поново да спроведе
да претходни програм.
Ја се путању као и пре, па ово је лакши део.
Ја цопи пасте овај скелет код
из документације тамо асинц.сериес отворена заграда,
отвори угласте заграде.
И сада имам једну приметити функција у овом почетку
секунде, видећемо где идемо од овог.
И сада приметити, да је мало комплекс на први
али се фокусира само на то ред по ред.
Фс.стат значи добити статистику или шта не од тог пута.
Назовите овај повратни позив када спремна.
Овај код је исто као и пре.
Ако постоји грешка, ту је сада једна разлика.
Опет, веома често парадигма у Ноде.јс програмирања је
ако нешто крене наопако и повратни треба да зна
да по конвенцији, први Аргумент повратни позив иде
да не постоји, ако је све добро или референца на објекат грешке,
капитал Е. То је као грешка класа које постоје у свету
али више о томе неки други пут.
Дакле, на овај начин, уколико постоји грешка, шта је импликација?
Па на основу онога што сам рекао серије ради,
је ако нешто крене погрешно, ми смо некако желим
да прекинете целу серију од анониман функција позива.
Дакле, довољно за мене да вратио само повратни пролаз
у Еррор објекту.
Јер ако стат дао ми назад грешка,
Ја би могао да створи нови Грешка предмет моје,
али ја стварно не брига за,
Ја само желим да прође без обзира грешка је то стварно десило
тако да могу да прођу на овом повратни позив.
И само да буде јасно, повратак није стриктно неопходна.
Ја у суштини желим да радим ово али сам хтео сада не "врати;
/ / Тако да не више код овде извршава ".
Дакле, опет други заједнички конвенција у ЈаваСцрипт,
иако ниси враћа вредност по себи,
желите да прође вредности на повратни позив функције
али онда желиш да се заустави извршење
функције која вас у, тривијалном начин
да се то уради је само позвати се врате овде.
Али нема ничег лошег,
ми само радимо повратка цаллбацк грешка иако се дешава
да се врате у недефинисаном вредности.
У реду, ово не врати највероватније вредност.
Све ми је стало је укрцавање даље извршење.
Дакле, мој конфлацију ових две линије је само стилиста
на конвенцији само на имају број линије
кода сам написао од 2 до 1.
Дакле, шта друго?
Ако не постоји грешка -
заправо да буде јасно Такође сам могао да избегне
да тиме ако друго.
Али опет, још један заједничка парадигма је провера
за своје грешке до врха и онда Само се врати пре него наставити
да увучете своју шифру са Елсес и Елсес и Елсес.
Дакле, ако то није датотека, сада, знате,
Хоћу да средим мало специјално.
Дакле, овде као у Јави или Ц + + или неколико других језика,
ево како можете инстанцирању противе тип грешке пролаз
у подразумеваном поруком од не фајл
и то је само донекле произвољна.
Али ја сигнализације грешка моја.
А шта ово последњи линија вероватно значи?
Све је добро.
Ако прође у нулл за параметар грешка, то само значи
конвенцијом све је добро.
Дакле, то значи да оно што ће се десити логично?
Ако је прошло нулл на цаллбацк
то значи ово анонимно Функција је успео
тако да говори.
Дакле, шта треба серија метод претходи и сада не заснива
на ранијем мом вербалне дефиниције?
[Нечујно Напомена]
Пређите на следећи, зар не?
Ако се вратио није Нулл вредност, то би само прекинути
и не више анонимна Функција би се звала.
Али не зато што има, онда ово ће се зове следећи.
Дакле, логика овде је прилично исти као пре
па ћемо видети како да очистите ово даље у тренутку.
Схватам да је ово врста много
да апсорбује све усмено и визуелно.
Али сада приметио, други анониман функција које желим
да се изврши у серији је да покуша да прочита датотеку.
Назовите овај позив у када будете спремни.
Ако постоји грешка, само сигнал је путем цаллбацк
тако да је остатак ове ствари прекида.
Друго повратак нулл.
Али зашто ја, пролазећи у два аргумента?
Па овај пут да сам прочитао фајл и добити назад
као променљива зове податке,
Желим да не само да значи све је добро по повратку нулл
за први аргумент.
Желим да се вратим стварни податке као други аргумент.
Јер ако сам прочитао даље у документацији,
приметити овај последњи комад кода средња заграда значи да је
крај серије.
Било је само два анонимна функције у овој серији.
Ако је грешка овде, онда Знам да је један од линкова
у овом ланцу тако није успео да говоре.
Дакле, другим речима, ова грешка ће бити предмет Грешка
да је нулл ако било од ови момци нису успели.
А ако је то случај, ја сам само ће да извуцете и ја ћу
да кажем 400 који значи захтев не,
то је веома генерички порука о грешци.
И онда, ја ћу да принт поруку о грешци напоље.
Дакле, ја не смета да бити супер анални овај пут,
Нећу да разликује између 500 и 404 и 403,
Ја сам само мало слепо махнем руком
и кажу да нешто није у реду.
Али, ако ништа не крене наопако урадио,
Ја ћу ово послати рес.енд пролази ове податке.
Сада то изгледа мало загонетан.
Али опет, ако сам прочитао документација,
Други аргумент за ово финале, финале повратни позив,
момак који је погубљен само када се ради серија
извршавању или део тамо од, ово ће бити низ
од свега другог аргумената
који су прошли на повр.
Сада, испада да само повезати у овој серији
који заправо врате на секунду аргумент је овај овде.
Зато ћу да те некако на Леап оф Фаитх једноставно коришћење претпоставимо
за тренутак да последње је метод
који вам даје последњи елементи низа.
Пошто овај низ да је у току доношење
мени има два Индициес, нула и један.
То је само нула нема никакву вредност јер овај момак враћа -
не прође у секунди Аргумент али овај момак ради.
Тако резултати носач нула је ништа,
Резултати носач један садржи шта,
ако сте се придрзавали дуж до ове тачке?
Фајл, здраво, свет садржај вероватно,
тако да је то како ја у ствари одштампати.
И дозволите ми да завршим један детаљ овде.
Ако урадим овакво старе школа, ако желим да се
у последњих елементе, ако бих могао урадите резултати [ресултс.ленгтх-1],
то је нека врста Олд Сцхоол начин
приступа последње елементе у - или нула индекс низа.
Али, као у страну, сетим да сам имао ову библиотеку
овде доња црта која по Конвенција се управо зове
буквално ундерсцоре карактер који није посебан,
то само изгледа кул као знак долара ради за јКуери.
Ово је само помагач метод наглашавају тачку последњи
који ради управо иста ствар.
А ако сте никада није користио пре наглашавају како ЈС
за клијента страни кодирање
и сервер страна је предивно користан библиотека
да што више људи је описано се понаша јКуери садржи све
од метода, људи желео дошао са самом ЈаваСцрипт.
У реду.
>> Дакле, као прилично мени и Гледао сам у серији,
имате као повратни позив као аргумент?
>> Да.
Као >> тако да када заправо као пусх то у,
и као што то ради Мислим када сте само
као цаллбацк а онда као -
[Нечујно Напомена]
>> Добро, добро питање.
Дакле, дозволите ми попните се асинц главна страна овде
или документација о ГетХуб.
Дакле, ово је канонски структура.
Ако користите овај позив Посебно метод серије,
постоје два велика дела њега.
Један је низ анонимне функције
а два је коначна повратни функција која је заправо
погубљен на веома крај серије.
Сада, ако увећате мало ближе на први
од оних великих ствари, низ анонимних функција
по захтевима овог документација момак има
да буде анониман функција која узима
у један аргумент зове повратни позив или трла или бар, није битно
али он га зове повратни.
И ово је нека врста вашег зујалице да вас Схаке Схацк рукама.
То је начин на који можете вратити вредност
купцу, јер вам може не само не буквално врате.
Мораш то урадити по начин ове повратни позив.
Јер ако унутар овог Функција је неки спор трчање
Код попут базе података упита, прочитајте фајл из фајл система,
Ви не желите да се тамо чекати и блокирају све остале,
желите да позовете повр.
Дакле, ово је буквално име аргумента.
Али као у Ц, ви имају показиваче функција.
У Јави имате методе референтни систем
а исто овде у ЈаваСцрипт.
То је променљива, али његова функција је тип.
Тако једноставно пишући своје име да ли повратни или трла
или бар, а затим отворене заграде и затвори заграда,
ви извршавању да на тој функцији.
И доношење нулл који значи нула грешка и један
што значи да је подаци које желим да прође унутра
А онда комад да буде јасно, ово је још један позив.
И то се не зове повратни позив,
то само концептуално је Функција повратни метод
зато што се зове по дефиницији
библиотеке овог аутора, када цела серија је завршена
или подскуп његов ако грешка се десило раније.
Дакле, назив цаллбацк функције, зове повратни функцију,
назив цаллбацк функције, зове повратни функцију,
другачија повратни функционишу сви заједно.
>> Ми сада имамо као дефинисати повр?
>> Не, јер овај момак ће проћи у свој низ
од анонимних функција,
показивач на коду жели да изврши.
Тачно, у реду.
Дакле, молим вас да кажу код добија мало једноставније.
Дакле, то може.
А ако сте попут мене, узети удобност у најмање знајући,
је потребно неко време да навикнути на то.
Али можемо очистити ово горе мало,
да не бацају превише у теби али ево још варијација
и његово коришћење други метод
у истој библиотеци зове водопад.
Наопако од којих је за разлику од серије где сваки
оних анониман функције извршавају у суштини
независно од сваки од осталих.
Водопад као име сугерише омогућава највишем функције
да некако прође у вредности на нижи функцију,
Нешто као каскаду воде.
Тако наопако овог је да сам некако могу
од користи то у моју корист.
У асинц.ватерфалл, приметити следеће.
Ја само могу да позовем фс.стат пролази на путу
да ја желим да се статистике о.
А онда се сетим пре него што сам имала анонимну функцију
који је имао два аргумента греше,
РЕЗУЛТАТИ а онда сам позвао Цаллбацк функција ручно?
У другој речи је само да буде јасно, подсетити да је раније
у Асинц 2, јесам све овог непријатан посао.
Позвао сам фс.стат прошао у П,
прогласио моје анониман функција.
Онда сам проверио да ли је грешка не нула онда сам урадио ово,
друго сам урадио, цео Лепота следеће конвенције
као у Ноде.јс је да повратни позив функције уопште требало
да узме бар један аргумент, Грешка објекат следи нула
или више корисне вредности.
Дакле, приметите парадигму овде,
ова функција повратни сам проглашење следи тачно
парадигма да је овај момак асинц библиотека ради.
Што ће рећи ово, зашто ја Ја спровођење свој цаллбацк
метод када аутор овог библиотека је буквално ми предаје
на тањиру да тако кажем, повратни функција могу да користим?
Дакле, ја само могу проћи у референце он ми је дао
тако да одмах, моји неколико линија
кода постане једна линија кода.
Сада, где да идемо са овим?
Следећи функција која Желим да изврши,
следећи анониман функција у овом низу
функција ради следеће.
Обавештење прво стат је Први аргумент.
Тако нешто има променила већ.
Сада, овај момак који је написао библиотеку -
и ја кажем момку јер је момак.
Овај момак који је написао ову библиотеку је документација гаранције
да ако ова функција овде пролази ми врати грешку објекат
или нулл затим коми раздвојена листа других вредности,
он ће сигурно учинити да они остале вредности су руку
на овој анонимној функцији како с лева на десно.
И оно што је било само Цаллбацк функција само једноставно
постаје последњи такав аргумент.
Сада, ја не знам ко сам фокусирајући се на само ви знате.
Али сада, шта је одузети овде?
Дакле, ми знамо из документација
или пре пар примера
да фс.стат коначно очекује повратни са два аргумента,
Грешка објекат који је Грешка објекат или нула следи
од позивањем на статистике приговор.
Дакле, ако ја мислим о томе, Грешка објекат кома статистика приговор,
која се уклапа у парадигми библиотеке ове особе.
Дакле, ја само могу да кажем, јер Ја но други аргумент
да је - то се дешава да доноси фс.стат
на прозивци је гријешити, статистика по дефиницији ове библиотеке,
Ја могу ставити други Име аргумената овде
или шта год ја могу да га преименовати
ако желим пратио по цаллбацк овде.
Дакле, ја могу проћи један вреднују одавде до овде.
Сада, све ове кода иако додуше донекле загонетан је
барем цопи пасте за Највећи дио од раније.
Једина разлика је обавештење Овде сам проглашава грешку
приговор и сада желим да се мало одгајивача.
Ја стварно желим да знам шта грешка, па идем
да увуците унутар овог објекта а имовина произвољно зове код
тако да знам да ово није фајл
да би требало да буде неовлашћено, то је ХТТП 403.
Дозволите ми да се сетим да је пре Прошла сам Еррор објекат
на повр.
И онда на крају покушати да прочитате датотека, тако да у овом случају,
водопад, ја сам сломљен код из два велика корака
на три мање корака.
Обратите пажњу на лепоту овде,
Ја могу да зовем фс.реадФиле пролази на путу.
А онда тежи део ментално, је сам само пролазе
У типа повратни позив.
Ствар да ме предаје, ја сам ће проћи на фс.реадФиле.
Зато што смо сви придржавају истим конвенцијама,
Први аргумент је повратни позив Грешка објекат или нула следи
од коми или одвојен Списак корисних ствари.
Дакле, шта то значи и сада ако ја прочитајте документацију Знаћу
ово, последњи цаллбацк, овај момак овде напољу
од угластим заградама се дешава да буде усвојен у Еррор објекту
или нула који би требало да проверите као и увек са овим кодом овде.
И онда по дефиницији ове методе
у документацији типа, последња вредност се вратио
из последњег метода у мом низу анонимно -
мој низ анонимних функција.
Дакле, шта чита фајл повратак
и ја користим повратак лабаво сада.
Мислим шта чита фајл центаршут као аргумената
поступку повратни њен руком?
Два аргумента, први је Грешка објекат или нула,
то је скоро увек ће бити одговор.
И друга ствар се дешава да буде оно за читање фајл?
Садржај датотеке, подаци као што смо га звали раније.
Дакле, једноставно изјављујући грешити, довести,
и проверите грешке овог је некако досадно сада.
Иначе, ја радим рес.енд пролази у том резултату.
Ово ће несумњиво не синхронизују у савршено
док ви у ствари пишу сами.
Али за сада, узети далеко најмање чињеница
да очигледно постоји ово заједничка парадигма, при чему ако се
и аутори библиотека све врсте штапа
са овом Конвенцијом од повратни метода.
И први аргумент је Грешка објекат или нула.
И други и трећи
и четврти објекти су ствари ми бринемо о и некако смо
од следе правила и документација.
Почели смо са кодом који искрено је прилично ружно.
И мада најновији пример је искрено мало напорно
да заврши свој ум око, то је бар визуелно,
Изгледа да је много чвршће.
А када добијете удобан са њим, то је много лакше
и то је много мање склони бубе од тог претходног примера.
Дакле, дозволите ми да демонстрирају једна ствар овде.
Ово је верзија три.
И - Не, хајде да остави ово сам.
Пусти ме у неколико друге ствари као последње раздраживача.
У реду, тако да је у серверу 2.
У реду. Прво, било каква питања, Знам да је ово много
али ви желели више инструкције, тако?
Ниси рекао добро упутства обавезно.
Да?
[Нечујно Напомена]
Тачно, ти си у суштини блажи за оперативни систем
да схватим како да жонглира све ове кугли одједном,
читање из датотеке, читање из базе података.
И то је то Јавасцрипт Сервер Сам је то један навојем.
И у суштини и заправо,
има једна слика Нисам повратим,
а то није нужно све то просветљујуће
али можда ћемо дати ти ментални модел.
Јава и сама чвор
посебно је ово тзв догађај петља.
Чиме, можете мислити од Ноде.јс, програма,
је буквално као бесконачна петља.
То је само дивља петља, чекајући и чека и чека,
у потрази за задатке да се заврши.
А задатак може да се, иди донесе нешто из базе података
или ево вредност од база података или иди овај фајл
од диска или овде захтевати од корисника.
Свака врста догађаја, као претраживачи догађај вођен,
па као сервер пратећи погон.
И свака од тих ствари представљају догађаје.
Дакле, неко у Ноде.јс, само написао бесконачну петљу,
велика дивља петља, чекајући за ствари да се деси.
И као ствари деси, то завршава у реду, зар не?
Наравно, база података можда вратити вредност.
И систем датотека, оперативни систем може вратити вредност
на отприлике исто време али ту се вероватно дешава
да буде неки наручивање њима.
И Ноде.јс ће имају суштински редослед
као велики низа или вектор, неки структура података
да баферује све од тих ствари.
Зато што може буквално само рукује један од њих на време.
Дакле, када ви, програмер,
писање асинхрони ЈаваСцрипт код користећи асинхрони
функција, ви омогућавајући ово такозвани догађај петља да оде
на следећи крпеља, зар не?
Дакле, док одмах вратити као сви
од ових метода асинхрони радим као читање датотеке и стат,
они одмах врате јер повратни крају
врати.
Чим се врати,
то значи да неко други може упуцани ван лагеру овде
или да може упуцани искључен испред реду овде.
И тако, постоји у Чињеница серијализација
од свега што се дешава,
иако све ове ствари може да се дешава паралелно
на мултитхреадед систему.
Али Ноде.јс себе и Сервер је покренут
као једна нит.
А доле страна која је т ти не нужно макс
Повратак рачунар је Способност је као посебно
ако имате 16 или језгро чак 2 језгра рачунар
а ви само користите једна инстанца чвора.
Али ако опет сам узети нешто као 161,
сте избегли велику ноћну мору од главобоље када је у питању
да се трка услова и браве и семафор
и писање заиста мултитхреадед код,
тако позитивних и мана.
У реду. Дакле, вратимо се код овде, дозволите ми да предложи да почнемо
да поједностави ствари мало.
Видели смо Сервер један мало пре који изгледао овако.
Дакле, то је вероватно прилично једноставна.
Али, баш као у свету ПХП, постоје оквири
као Ларавел и ту је ствари као што Раилс и Дјанго,
Иста ствар на свету Ноде.јс.
И ми ћемо провести више време на ово у среду
и у следећем пројекту.
Али ако ја одем у Сервер 2 именик,
приметити неколико парадигми овде.
Дакле, ово је - тамо да буде еквивалент пример
али је користећи оквир зове екпресс.јс,
који је бесплатан опен соурце софтвер као Раилс и Дјанго,
као Ларавел, то је само на крају иде
да се не цени данас Зато смо писање
овако једноставне примере.
Али верујте нам.
То ће врло брзо постати твој пријатељ
јер ће уштедети Ви доста ТДС кода.
И заједнички парадигма за екпресс.јс апликација
да имају апп.јс или сервер.јс фајл који садржи логику
вашег програма или на Најмање улазна тачка.
Можете да имате више датотека.
Чвор модул поддиректоријум који има библиотеке
да сте преузели као Асинц
и изрази себе у другима.
А онда пацкаге.јсон, пацкаге.јсон изгледа овако,
и можете га креирати ручно или алата га створи за вас
и то буквално је ЈСОН фајл
и занимљив део је у зависности овде.
Баш као у Ларавел, ви Имао је продавац директоријум
и ви морали да бринете о пакетима и ради -
заправо ажурирање са Занатлија или сличне команде,
библиотеке ви су инсталирани,
Слично је и са пацкаге.јсон овде а ви управљате библиотеке
и верзије да вам је стало.
Дакле, ако ја имам пацкаге.јсон, Ја једноставно могу да урадим НПМ,
Чвор Пакет Мангер инсталирате, то ће аутоматски изгледати
у том пацкаге.јсон фајлу.
Погледајте и видите, ја имате најновију верзију
од свих продаваца модула
у чвор наглашавају модули именик овде или можда
у неком родитељу или предак именик.
А ако не, то је ће их преузети
и видећете гомилу
ХТТП ствари дешава преко жице.
Тако на пример, нека ме вам покаже садржај
модула чвора само да изразе.
Пусти ме само напред и смело делете модула чворова
тако да све што сада имам је ово.
А ако ја не НПМ инсталирате, ви ћете видим да ће то читати
да пацкаге.јсон фајл и Видели смо излаз сличан
да ово у Ларавел свету.
То је преузимање целину гомила ствари и то је то
јер експрес заузврат зависи гомилу
других народа библиотека.
Дакле, сви они су на неки начин преузимају рекурзивно.
До сада, ако ја радим у ЛС опет,
ту су моји модули чворова директоријум назад
и изразе као назад.
Дакле, то је само начин поједностављивање пакет за управљање.
Сада, ако погледамо апп.јс фајл, ово се дешава
да буде враћање за Најранији наш веб сервер
где смо само пљују напоље "здраво, свет".
Али приметите парадигме овде,
Прво ћемо затражити екпрес модул, онда имамо ову линију
кода који знате из документације.
Ви буквално третирају то модула променљива као функцију,
тако отворено заграда близу заграда значи да га изврше.
То ће очигледно врати нешто ми иде
обично зову апликацију.
Како то ради?
Ја стварно не знам.
Пустићу неко други, знате, у експрес свету пишу да.
Ја ћу сада стоје на његовог или њеног рамена како
да мој захтев ради мало једноставније.
Ево, ја ћу да слушам на том порту
који би могао да буде највећи ништа.
И овде је код који је можда више подсећа сада
од Ларавел и роутес.пхп.
Дакле, ово је вечера једноставан, ја сам само да наведете путању
за сласх звезде, па све ће се апсорбује
овај захтев руковалац.
Парадигма за захтев руковалац је његова функција анониман
са аргументом захтев
и објекат одговор баш као и пре.
И рес.сенд у изричитим средствима шаљете код пратио
по шта год желите да пошаљете.
И наравно, можете урадите нешто љубитељ
самим слањем датотека или ХТМЛ
или динамички генерисан садржај.
Али за сада, све што смо урадили је испљунути Хелло, ворлд.
Ако одемо у три сервер, ово је још само љубитељ
да вам покажем неке функционалности.
И ми ћемо вам показати е чак секси верзија
ово је у среду.
Али, ако сте икада чули од Соцкет ИО можда,
тако ја мислим Џонатан или неко рекао раније,
једна од ствари чвор је заиста познат
за је њен прави пут понашање, зар не?
Размислите о ПХП у МиСКЛ, ако били да спроведе ћаскање сервер
у ПХП где двоје људи могли отворите прозор прегледача на фоо.цом
а затим почети ИМинг сваки други, Алиса у једном прозору,
Боба у други, тако да сваки од њих види његова
или њене поруке у други прозор.
Како би ти то у ПХП и МиСКЛ?
Коришћење или не користећи Ларавел врсту нематеријалног, можете имати
као индек.пхп датотека.
И мораш да имаш - у неким случајевима мора да пљуне
ван форме, тако да је Биће ХТМЛ образац
који вероватно не подноси преко нормалног обрасца подношење
али Ајакс вероватно, зар не?
Дакле, на поднети руковаоца, тако куцате у пољу за текст,
ударио ентер и онда она добија послао на сервер преко Ајакс.
Шта радите онда радим на серверу?
Дакле, имаш индек.пхп
или нешто тачка ПХП то је примио у ХТТП параметру
од стране корисника, Алиса је или Боб инстант порука, шта радите
с тим да би га пропагирају Бобу или Алице, респективно?
На тебе мислим буквално имају алате са којима
да се то уради у вашем мин.
Дакле, као шта би ти урадио?
Имате један минут да примену овог програма.
Да?
[Нечујно Напомена]
Савршено. Десно, па имаш базу података.
Ми знамо мало мало о МиСКЛ.
Дакле, имате табелу то је порука,
Можда постоји пута печат, кориснички ИД,
Тело поруке сама створио да,
ажурира и да све то.
Дакле, ви чувате у бази података.
И претпоставимо Алиса шаље Прва порука, како се Боб добити
да сада порука из базе података?
>> То може бити неки Ајакс одговор да се стално иде
назад на базу података Најбољи добити [неразумљиво].
>> Тачно.
Дакле, Бобова код ко је је код исто као Алиса је само врста
од симетричног односа,
Боб је претраживач има неке Ајакс код то је вероватно можда сваки 30
секунди повлачењем сервера преко Ајак синхронизацију,
постоје нове поруке?
Да ли постоје нове поруке?
Сваких 30 секунди се дешава да буде нека врста субоптималан
јер он мора да сачека још
ако Алиса буквално само послао поруку.
Дакле, Боб претраживач могао сваки други погодио сервер.
Али то значи да је Алиса прегледач је ударање сервер
сваке секунде.
Шта је са Цхарлие [Претпоставља правопис]
и Дејвид [претпоставља правопис] и Едвард [претпоставља правопис]
и сваки други слово од абецеде?
У чему је проблем овог приступа?
Много хитова прекомерних -
Мислим да си управо ефикасно Дозирања свој вид
или ДДОСинг, Дистрибутед Дениал оф Сервице напада
на свом сајту, тако што све
од ових корисника покрећу ЈаваСцрипт код који је управо Пингинг
врага из вашег сервера чак и ако произвољан број,
80 одсто времена нико није рекао ништа
у цхат соби.
Али ти само проверавам да се уверите на такав.
Дакле, ПХП-у много језици су само не добар
за комуникацију у реалном времену.
Јер у ПХП опозива постоји не централна меморија, зар не?
Имате сесије објекте који ствара илузију
централног складишта, али то је на по основи за корисника.
Немаш глобалну меморију као ти у Јава Сервлет
у познато или у другом оквир функционише тако.
Ноде.јс мада, ви немате глобална меморија јер имате
један сервер и да "може сетим се жели
о свим корисницима.
А ти и даље могао имају базу података.
Али лепа ствар у вези Ноде.јс превише је да је много боље
него нешто попут ПХП и стварајући илузију
руковања вишеструко ствари одједном.
И у ствари, као на страни, можете имплементирати сервере за ћаскање у ПХП,
али ви обично би урадио нешто што се зове дуг бирачког
при чему не пингујете сервера сваке секунде.
Ви одзив сервера, сервер не реагује на вас
за одељење од 30 секунди, буквално седи
у петљи чека и чека.
И проверава сервер ако ту је нови подаци у бази података
и само њега када види, "О, Овде је порука од Боба, "
то одговорили ХТП серверу?
Дакле, ефекат у вашем претраживачу је да икона ИЕ или Мозилла
или шта год само чува предење за 30 секунди одједном.
Али добра страна је, ви не урадите имам 30 захтеве за повезивање
у 30 секунди, имате једну.
Дакле, то се зове дуго бирачко.
Али, чак и боље у модерном веб прегледачи је нешто што се зове
ВебСоцкет, што узмете ЦС143,
можете ефикасно направити ТЦП конекција од А клијената
као бровсер на серверу а онда виси на њему
без употребе скоро као многи ресурси
као ХТТП можда традиционално уради.
И Подножје ИО Ноде.јс библиотека
што га чини много лакше да се направити утичницу везе
или илузије тамо на за старе прегледаче
тако да можете да спроведе ово реалном времену функционалност је.
Дакле, овде је пример.
Ове ствари се добија врху мало компликованије
али то је углавном копирај из документације соцкет.ио с.
Ево сада више прецизан захтев за претовар.
Ако корисник захтева сласх, шта ћу фајл
да буде очигледно служе до њих?
Индек.хтмл.
И ту је неки нови ствари овде поток
које ћу ти показати у само једном тренутку.
Али, ово је само још један начин
од зграбио поднесе мало ефикасније
него само ради фс.реадФиле.
То је мало паметнији посебно за велике фајлове.
Дакле скратим причу, ове линије само да служи
до датотеку под називом индек.хтмл
који за сада претпостављају садржи ХТМЛ образац по којем Алиса
и Боб могу интерцоммуницате.
На крају, ио.соцкетс.он, па ово долази из ове линије овде.
Дакле, ја само читање документација ио.соцкет ми даје
приступ тзв ВебСоцкет са претраживача,
између претраживача и сервера.
Слушам за специјалне догађај веза која средства
када корисник први хитс сервер покушава
да отворите ову везу, ја сам звати овај позив назад.
И сад, ја идем да урадите следеће.
Сваких пет секунди, шта ћу да урадим?
Идем да емитују или емитују ако се сећате огреботине,
графички језик би да емитовању блокира?
Дакле, идете да емитују
или активирати догађај под називом произвољно са сервера.
И то ће се садржи поруку Пинг
и тренутни датум.
Дакле, ово је стварни ћаскање сервер који Алис
и Боб могу да користе, али је некако од аутоматизованог чет сервера
где су поруке само нека врста сонар пингује.
То је само датум у временима која су шаљу сваких пет секунди.
Дакле, ако ја у ствари покренути ово ствар - и то је то.
Да буде јасно овде доле, обавештење ово је само логовање овде доле.
Дакле, дозволите ми да слепо око тога.
Пусти ме да радим чвор апп.јс.
Пусти ме да идем у мој бровсер.
Релоад почетну страну овде.
[Пауза]
И дозволите ми да затворите инспектора.
Сваких пет секунди, ја имам демонстрација иако не
интерактивни за човека
нечега што је дешава асинхроно.
У обавештењу претраживача, нема предење икона.
То је користећи одгајивач функцију Цхроме у савременим прегледачима
одржавања сокет веза испод хаубе
и то је оно што се зове генерално паб / суб модели,
објави / субсцрибе модел, где нисмо урадили
да сасвим експлицитно овде.
Али оно што је лепо у вези са овом општи пуб / суб парадигма
да можете имати једну издавача.
У овом случају Централни сервер и све
појединца претраживачи су клијенти.
Алицес и Бобс од свет може да се претплатите на њега,
тако да може да пренесе поруке међу сваком броју корисника.
И мада опет смо не видим интерактивност,
смо можда имали 12 линија кода само да се то уради.
И то вероватно није преступна да замислите како можете да бичем
ван индек.хтмл фајлу да има прави ХТМЛ форму,
Мало јКуери кода са Ајакс да не пошаље дању
али само шаље год Алиса или Боб типа на сервер
а затим сервер ће га релеј напоље.
И обећавам да наслутити на једна ствар само
да вам зафркавати са овим.
Ако одемо у потоку нула и један,
видећете код који је управо мало другачије овде.
Само да сте га видели, ово је алтернатива
на оно што сам назвао фс.реадФиле метод раније, при чему,
можете рећи Ноде.јс, "Иди прочитајте ову датотеку у меморији.
Али, ако је велика само дати ми комад на време. "
А можда знате из ЦС165
или 161 фајл систем имају различите
својства перформанце.
Можда ћете желети да прочитате у блоковима од 512 бајтова
или 2 килобајта или шта год.
Ово је начин да се оптимизују вратимо датотеке итеративно
тако да можете да га пљујеш се мало брже
на претраживачу или на ко год крај клијент.
Дакле, огромна количина садржаја данас и идемо да рони
у више детаља у среду са Тимом [претпоставља правопис]
нарочито гледајући како смо може превести неке од идеја
из прве половине Наравно Ларавел и модели
у библиотеци који је и сам написао зове Бооксхелф.јс
који се све више постају популаран у заједници
јер вам даје већину тога,
ако не више од функционалност елоквентан
који опозив је да библиотека увид Ларавел,
тако више о томе и више како
да развију пуноправно апликације у среду.
Ми ћемо вам онда видети.