Киришүү
Веб жөнүндө билүүгө аракет кылып жатканда
иштеп чыгууда, биз, адатта, алдыңкы аягы арткы чекке караганда кыйла жеткиликтүү экенин байкайбыз. Мунун көптөгөн себептери бар, атап айтканда, коддогу барактын белгилүү бир элементин өзгөртүүдөн жана веб-сайтка колдонулуп жаткан өзгөртүүнү байкагандан келип чыккан заматта жооп кайтаруу сезими. Бул пикир көп учурда үйрөнчүктөр үчүн пайдалуу, анткени ал алардын кодун тууралап, каталарынан сабак алууга мүмкүндүк берет. Тилекке каршы, бул бэкендде андай эмес: көбүнчө терминалда жөнөкөй "Салам дүйнө" билдирүүсүн алуу үчүн чөйрөнү алдын ала орнотууга жана зарыл болгон көз карандылыктарды орнотууга көп эмгек жумшалат. Бактыга жараша., ачык булак коомчулугунда алкактарды иштеп чыгуу процессин жеңилдетүү багытында көп ийгиликтерге жетишип жатат жана NodeJs иштеп чыгуучунун тажрыйбасын өркүндөтүү - бул сервердик жазууну жасаган абдан жөндөмдүү технология Javascript коду ыңгайлуу жана аны атаандаштарынан айырмалап турган ар кандай орнотулган инструменттерди жана функцияларды сунуштайт.
Эмнени курабыз?
ToDo тиркемелери - бул алдыңкы программаны иштеп чыгууну үйрөнүп жаткан башталгычтар үчүн негизги долбоор. Ошондуктан биз Todo тизмеси API түзүүнү чечтик. Бул бизге интерфейсибизге берилиштердин туруктуулугун кошууга мүмкүндүк берет жана бул маалыматтарды башкаруу мүмкүнчүлүгүн берет (кошуу, жаңыртуу, todos жок кылуу ж.б. аркылуу….).
Акыркы кодду [бул жерден] тапса болот (https://github.com/Zineeddine998/workshop_todo_application).
Биздин куралдар
Бул долбоор үчүн биз жөнөкөйлөштүрүлгөн технологиялык стек колдонобуз. Аны реалдуу турмуштагы долбоорлордо таба турган көптөгөн куралдардын минималдуу версиясы катары кароого болот, себеби жогорку деңгээлдеги идеялар бирдей. Ишке ашыруунун чоо-жайы жана конкреттүү инструментти башкага караганда тандоо баштоо үчүн маанилүү эмес.
-
NodeJs, биз белгилегендей, сервердик тиркемелерди куруу үчүн эң популярдуу Javascript алкактарынын бири.
-
ExpressJs бул NodeJSтин үстүндө колдонулган минималдуу Javascript алкактары. Бул көптөгөн камтылган функцияларды колдонуу менен иштеп чыгуу процессин тездетет. Ал ошондой эле инженерлер үчүн колдонууну жеңилдетүү максатында NodeJS долбоорлорунда иштеп чыгуу практикасын стандартташтыруу жолу катары колдонулат.
-
LowDB бул жөнөкөй эс тутумдагы маалымат базасы. Анын жөнөкөйлүгү NodeJs долбоорундагы маалымат базасы менен кантип иштешүүнү көрсөтүүгө мүмкүндүк берет, жайылтуулар жана конфигурациялар сыяктуу өнүккөн темалар менен алектенбестен.
Эми биз колдоно турган бардык куралдарды аныктаганыбыздан кийин, келгиле, баскычтопторубузга өтүп, коддоону баштайлы!
Орнотуу
Node бардык платформаларда жеткиликтүү. Бардык орнотуу колдонмолорун [расмий веб-сайттан] тапса болот (https://nodejs.org/en/download/). Windows колдонуучулары түйүн чөйрө өзгөрмөлөрүнүн жолу кошууну текшериши керек, ошондуктан ал буйрук сабында колдонулушу мүмкүн.
Бизге орнотулган npm да керек болот. Npm NodeJs үчүн стандарттуу пакет менеджери болуп саналат. Бул биздин долбоордун көз карандылыгын башкарууга мүмкүндүк берет. Орнотуу боюнча колдонмону [бул жерден] тапса болот (https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
Долбоорду инициализациялоо
Шилтемеге өтүп, баштапкы долбоорду клондоңуз:
Бул биздин долбоор үчүн жөнөкөй баштапкы репозиторий. Бул долбоордун файл структурасы менен бирге биз колдоно турган бардык көз карандылыктарды камтыйт. Ар бир элементке жеткенден кийин түшүндүрүп беребиз. Терминалыңызды ачып, долбоордун жолуна өтүңүз жана буйрукту аткарыңыз:
npm install
Бул package.json файлында көрсөтүлгөн долбоордун бардык көз карандылыктарын орнотот. package.json – бул Javascript/NodeJs долбоорунун түбүндө табылган файл, ал акыркы жөнүндө метаберилиштерди камтыйт жана бардык долбоордун көз карандылыгын, скрипттерин жана версияларын башкаруу үчүн колдонулат.
Бардык көз карандылыктар орнотулгандан кийин, биз колдонмобузду баштасак болот:
npm run start
"старт" - бул пакетте көрсөтүлгөн скрипт. json файлы. Ал биздин тиркемеге кирүү файлын көрсөтөт, ал биздин учурда app.js.
Эми терминалыңызда төмөнкү билдирүү пайда болушу керек:
Бул биздин сервер ийгиликтүү башталганын жана 3000 портуна жөнөтүлгөн бардык сурамдарды угуп жатканын билдирет. Келгиле, app.js дарегин карап, бул жерде эмне болуп жатканын түшүндүрүп көрөлү:
App.js - бул биздин долбоордун кирүү файлы (жана ушул учурда жалгыз). Биз колдонмо деп аталган экспресс тиркемени түзөбүз, http методу "GET" жана '/' субжолу бар бардык суроо-талаптар ушул маршрут менен иштетилерин белгилейбиз, сурам жана жооп объекти катары кабыл алынган ортомчу программа деп аталган функцияга өтөт. параметрлери. Бул өтө маанилүү, анткени сурамда аны иштетүү үчүн зарыл болгон бардык маалыматтар камтылган (параметрлер, суроонун негизги бөлүгү, суроонун аталыштары ж.б.) жана жооп объектиси кардарга кайтарылат. Биз жөн гана "Салам дүйнө" билдирүүсүн жөнөтүү менен баштайбыз. Андан кийин биз тиркемебизди көрсөтүлгөн портко (биздин учурда 3000) келген бардык суроо-талаптарды угууга мажбурлайбыз жана колдонмобуз иштеп, иштеп жатканын жана суроо-талаптарды кабыл алууга даяр экендигин көрсөтүү үчүн "3000 портуна угуу" билдирүүсүн киргизебиз.
Терминалыңызды ачып, шилтеме тилкесинде "localhost: 3000/" деп терип, Enter баскычын басыңыз. Бул жергиликтүү серверибизге жетүү үчүн колдоно турган көрсөтүлгөн жол. Сиз төмөнкү билдирүүнү аласыз:
Берилиштер базасынын конфигурациясы
Lowdb колдонууга оңой жана атайын орнотууну талап кылбаган ачык булактуу маалымат базасы. Мунун артында жалпы идея жергиликтүү json файлында бардык маалыматтарды сактоо болуп саналат. LowDB орнотулгандан кийин (биз бардык көз карандылыктарды орноткондо аткарылган), биз db.js'ге төмөнкү кодду кошо алабыз:
Бул код LowDB расмий документтеринде табылган бир кыйла окшош. Биз аны өзүбүздүн колдонуубуз үчүн бир аз өзгөрттүк. Аны сап-сап түшүндүрүп берели:
Биринчи бир нече саптар керектүү көз карандылыктарды импорттоо үчүн. "кошулуу" - бул "жол" модулунда жеткиликтүү болгон пайдалуу функция. Бул NodeJsтин негизги модулдарынын бири, ал жолдор менен иштөө жана башкаруу ыкмаларын сунуш кылат. "Төмөн" жана "JSONFile" - бул LowDB тарабынан ачылган эки класс. Биринчиси биздин маалыматтарды камтыган json файлынын инстанциясын түзөт. Экинчиси, ага ылайык иш кыла турган чыныгы маалымат базасын түзөт. Акырында, "lodash" жалпы программалоо тапшырмалары үчүн ар кандай пайдалуу функцияларды сунуш кылган эң көп колдонулган JavaScript китепканаларынын бири. Маалыматтарыбызды иштетүү үчүн анын өркүндөтүлгөн ыкмаларын колдонууга мүмкүнчүлүк берүү үчүн биз аны маалымат базасынын инстанциясына кошобуз.
Биринчиден, биз db.json файлынын жолун аныктайбыз. Бул биздин маалыматтарыбызды камтый турган жана LowDBге өткөрүлө турган файл. Эгерде файл көрсөтүлгөн жолдо табылбаса, LowDB аны түзөт.
Андан кийин биз файлдын жолун LowDB адаптерине өткөрүп, аны жаңы LowDB маалымат базасына өткөрүп беребиз. Андан кийин "db" өзгөрмөсүн биздин маалымат базабыз менен байланышуу үчүн колдонсо болот. Маалыматтар базасынын инстанциясы түзүлгөндөн кийин, биз json файлынан db.read() аркылуу окуйбуз. Бул биздин базанын инстанциясында "маалымат" талаасын орнотот, андыктан биз маалымат базасынын мазмунуна кире алабыз. Бул саптан мурун "күтөм" деп жазганыбызды байкаңыз. Бул бул нускаманы чечүү үчүн белгисиз убакыт талап кылынышы мүмкүн экенин жана NodeJs процесси коддун калган бөлүгүн улантуудан мурун анын аткарылышын күтүшү керек экенин көрсөтүү үчүн. Биз муну жасайбыз, анткени окуу операциясы көрсөтүлгөн файлга эстутумга кирүүнү талап кылат жана мындай операцияны аткаруу убактысы сиздин машинаңыздын спецификацияларына жараша болот.
Эми биз маалымат талаасына кирүү мүмкүнчүлүгүнө ээ болгондон кийин, биз аны посттордун бош массивинен турган объект катары койдук, тагыраак айтканда, файлда кандайдыр бир алдын ала маалыматтар бар же жок экенин текшерип, эгер андай эмес болсо, бош массивди коёбуз.
Акыр-аягы, биз маалыматтарга киргизген өзгөртүүлөрүбүздү колдонуу үчүн db.write() аткарабыз жана маалымат базасынын инстанциясын экспорттоо үчүн аны биздин долбоордун башка файлдарында колдонобуз.
Жалпы суроо/жооп иш процесси
Төмөнкү диаграмманы карап көрөлү:
Бул NodeJs/Express менен курулган көптөгөн бэкенддик тиркемелерде колдонулган жалпы архитектураны көрсөтөт. Сурам менен иштөөнүн артындагы жалпы иш процессин түшүнүү сизге NodeJs тиркемелерин түзүүгө жана түзүүгө гана мүмкүндүк бербестен, бул түшүнүктөрдү каалагандай каалаган техникалык стекке өткөрүүгө мүмкүнчүлүк берет. Биз бул процесске тоскоол болгон ар кандай катмарларды изилдеп, алардын ролун түшүндүрөбүз:
## HTTP суроо катмары
Бул биздин тиркемедеги биринчи катмар, аны ар кандай кардарлардан келген ар кандай суроо-талаптардын кеңири спектрин кабыл алган шлюз катары элестетиңиз, ар бир суроо талдоодон өтүп, аны иштетүү үчүн колдонмонун атайын бөлүгүнө жөнөтүлөт.
-
Маршрутизаторлор: бул жерде биз Экспресс роутерлерди айтып жатабыз, бирок бул концепцияны көптөгөн бэкенддик алкактардан тапса болот. Маршрутизаторлор биздин бизнес логикасындагы логикалык бөлүштүрүүнү кодубузга колдонуунун бир жолу, башкача айтканда, окшош өзгөчөлүктөргө ээ болгон элементтердин ар бир топтому бир эле жазуу менен иштетилет жана башка топтомдордон ажыратылышы мүмкүн. Бул коддун ар бир компонентин башкалардан көзкарандысыз кылуу жана сактоо жана кеңейтүү жеңилдигине ээ. Тагыраак айтканда, мисал катары, "/posts" жалпы url жолунун шарттарын аткарган бардык суроо-талаптар ошол эле роутер тарабынан аткарылат. Алардын http ыкмасына жараша (GET, POST, ж.б.) башка контроллер колдонулат.
-
Контроллер: контроллер роутерлерден чыпкаланган суроо-талаптарды кабыл алат, кошумча иштетүүнү колдонот жана ылайыктуу тейлөө ыкмаларын чакырат.
Бизнес логикалык катмар
Бул катмар колдонмону колдонуунун конкреттүү учурларына жана анын артында турган бизнес логикасына жараша уникалдуу.
-
Кызматтар: Кызматтар колдонмонун негизги логикасын камтыган ыкмалардын жыйындысы. Алар ошондой эле ORMs/ODMs аркылуу маалымат базасы менен иштешет. %20Документ%20Карталоо,график%20берилиштер базасы%2C%20ж.б.).
-
Үчүнчү тараптын кызматтары: көптөгөн заманбап колдонмолор колдонмонун логикасынын бир бөлүгүн API аркылуу жеткиликтүү болгон атайын кызматтарга өткөрүп берүүнү тандашат. Бул түрдөгү кызматтар төлөмдөрдү башкаруу кызматтары, статикалык файлдарды сактоо, эскертмелер жана башкалар болушу мүмкүн.
-
ODM/ORM: ORMs жана ODMs кызматтар менен маалымат базасынын ортосунда ортомчу катары иштешет. Алардын ролу маалымат базасына жогорку деңгээлдеги абстракцияны камсыз кылуу болуп саналат, бул иштеп чыгуучуга SQL сыяктуу атайын берилиштер базасы тилдеринин ордуна өзү тандаган программалоо тилинде код жазууга мүмкүндүк берет.
Маалыматтын туруктуулугу катмары
- Берилиштер базалары: биз жогоруда айтылгандай, дээрлик бардык тиркемелер маалымат туруктуулугун талап кылат. Бул бөлүк маалымат базалары тарабынан иштетилет жана маалыматтардын мүнөзүнө, бизнес логикасына жана башка көптөгөн ойлорго жараша, белгилүү бир маалымат базасын башкасына караганда тандоо колдонмонун натыйжалуулугу жана масштабдуулугу үчүн чечүүчү мааниге ээ.
Мисал: Пост кошуу
Эми биз архитектуранын жалпы идеясын түшүнгөнүбүздөн кийин, аны жөнөкөй мисалыбызга колдонолу. Биз колдонмобузга todo постун кошуу өзгөчөлүгүн ишке ашырабыз. Келгиле, ар бир посттун уникалдуу идентификатору бар деп ойлойлу, аны кийинчерээк маалымат базасында аныктоого мүмкүндүк берет, сап болгон аталыш жана бүтүн сан түрүндөгү тартип. Биздин диаграммадан кийин, биз роутерди ишке ашыруудан баштайбыз. index.js файлына төмөнкү кодду кошуңуз:
Бул биздин роутер файлыбыз. Биз контролерибизден экспресс жана “addPost” ыкмасын импорттойбуз (биз муну жакында ишке ашырабыз), экспресс роутердин мисалын түзүп, addPost ыкмасын роутерибизге байлайбыз, башкача айтканда, ар бир суроо үчүн тамыр жолу жана http бар. "POST" ыкмасы, аны иштетүү үчүн "addPost" ыкмасы чакырылат.
Контроллерде методубузду ишке ашыруудан мурун, биз негизги app.js файлыбыздагы жаңы роутерге шилтеме жасайбыз жана анын жолун "/posts" катары белгилейбиз: Белгиленген жолдору бар бардык маршруттар ушул роутерге жөнөтүлөт, ошондуктан аны иштетүүгө болот. ар кандай контроллер ыкмалары менен:
Биз роутерди импорттоп, аны "пост" деп атайбыз. app.use("/posts",..) "/posts" субжолу менен бардык сурамдар, алардын http ыкмасына карабастан, көрсөтүлгөн роутерге багыттала турганын билдирет.
app.js'ге башка өзгөртүүлөр аткарылышы үчүн маалымат базасынын конфигурация файлын импорттоо жана суроо-талаптын негизги объектине кирүү мүмкүнчүлүгүн берүү үчүн express.json() программасын ортомчу программа катары колдонууну камтыйт.
Эми маршруттарыбыз коюлгандан кийин, controller.js файлына “addPost” ыкмасын кошо алабыз:
“addPost” – бул суроо-талапты, жооп берүү объекттерин жана кийинки функцияны параметр катары кабыл алган ортомчу программа функциясы. Кийинки функция чакырылганда, процесс чынжырдагы кийинки орто программага өтөт же сурамды аяктайт. Методдун кодунда биз суроо-талаптын органынан аталышты жана тартипти чыгарып алабыз жана аларды параметр катары "createPost" кызмат функциясына өткөрүп беребиз. Бул функция пост атрибуттарын алып, жаңы постту жаратат жана аны кайтарат. Жаңы пост түзүлгөндөн кийин, биз аны кардарга 200 статус коду менен кайтарып беребиз, бул өтүнүч ийгиликтүү болду дегенди билдирет. Биздин код күтүлбөгөн катаны кармап, кийинки орто программага өткөрүп берүү үчүн try/catch блогунун ичине коюлганын байкасаңыз болот. Бардык роутерлерге катаны чыгарып, кардарга олуттуу ката кабарын кайтарып берүүчү ката менен иштөөчү орто программаны тиркөө эң мыкты практика деп эсептелет.
Азыр гана service.js ичинде "createPost" функциясын ишке ашыруу калды:
Архитектуранын ар кандай катмарларын түшүндүрүп жатканда жогоруда айтылгандай, тейлөө катмары ORM/ODM колдонуу аркылуу маалыматтарды сактоо чечими менен өз ара аракеттенет. Бирок, биздин мисалда бизге өзүнчө ORM колдонуунун кереги жок, анткени Lowdb Javascript үчүн орнотулган колдоо менен келет. Анын синтаксиси тууралуу бардык деталдарды [документациядан] тапса болот (https://github.com/typicode/lowdb).
"createPost" ыкмасы аталышты жана тартипти параметр катары алат жана аларды пост объектин түзүү үчүн колдонот. Уникалдуу идентификатор үчүн биз символдордун уникалдуу ырааттуулугун жараткан “nanoid” деп аталган атайын китепкананы колдонобуз. Жаңы постту маалымат базасындагы посттор массивине кошуп, бул өзгөртүүлөрдү жазабыз; жаңы пост функция тарабынан кайтарылып берилет.
Эми "createPost" даяр болгондон кийин, постторду кошуу функциясы аяктады жана иштеп жатат. Биз аны API'лерди сыноо үчүн популярдуу курал болгон Postman аркылуу сынап жатабыз:
Сурамдын http ыкмасы катары "POST" жана көрсөтүлгөн url жолу менен "localhost:3000/posts" тандайбыз. Биз аталышты жана тартипти негизги бөлүмгө json форматы катары кошуп, суроо-талапты жөнөтөбүз. Жогоруда көрсөтүлгөндөй, биз жаңы түзүлгөн пост менен бирге 200 OK статусун алабыз.
Корутунду
Бул долбоордо көптөгөн концепциялар жана идеялар изилденди: Биз долбоордун чөйрөбүздү кантип орнотууну жана жөндөө керектигин карадык, жергиликтүү берилиштердин туруктуулугу үчүн LowDBди конфигурациялоону үйрөндүк, NodeJS/Express бэкенддик тиркемелеринин жалпы архитектурасын изилдедик жана кантип жасоону көрдүк. аны жөнөкөй мисалда колдонуңуз. Акыр-аягы, биз Postman аркылуу колдонмобузду сынап көрдүк.
Бул жерде максат заманбап бэкенддик тиркемелерди курууга кирген нерселердин жөнөкөйлөштүрүлгөн версиясын ачып берүү болгон. Биз мурда көргөндөй, NodeJs жөнөкөй жана татаал API түзүүгө мүмкүндүк берген күчтүү курал. Экспресс жана ар кандай колдонуу учурлары үчүн көптөгөн куралдар жана китепканалар сыяктуу алкактардын бай экосистемасы менен айкалышып, бул заманбап бэкенддерди өнүктүрүү үчүн мыйзамдуу чечим болуп саналат - биз үйрөнүп, өздөштүрүүнү сунуш кылган чечим.