Моят фон

Javascript не е първият език за програмиране, който научих и го използвах само няколко пъти, само за да опитам (въпреки че не създадох нищо, използвайки го). Първият ми език за програмиране е Java и никога не успях да създам реален проект с помощта на Javascript в годините си в колежа. Така че това е моят опит с Javascript

Бързо напред към първата ми работа след завършване на колеж, бях приет като backend разработчик, използващ Java като техен основен език за програмиране. Така че не се виждах някога да кодирам с помощта на Javascript, защото мислех, че имам работа като бекенд разработчик на Java. Ще прекарам по-голямата част от кариерата си, използвайки Java. Но това не е така

Един ден мой приятел ми предложи проект за създаване на система за наставничество, използваща Node.js като бекенд. Помислих си страхотно, може би мога да науча нови неща с помощта на Node.js. Да, научих много нови готини неща, които не знаех преди, както и малко разочароващи. Ще споделя какво научих, използвайки Javascript за първи път.

Страхотно, NPM!

NPM е съкращение от Node Package Manager. Тя ви позволява да инсталирате пакети или библиотеки, създадени от други хора по конкретна причина, и да ги използвате във вашия проект. Например искате да създадете генератор на произволни числа, един от начините да го направите е да създадете сами функция във файл или клас и просто да я използвате. ИЛИ можете просто да използвате NPM, за да извлечете пакет от някой друг, да го импортирате и просто да го използвате и това е много лесно да се направи. Просто поставете това във вашия CLI във вашия проект

npm install number-generator

И БАМ! вашата нова библиотека е инсталирана и можете да я импортирате във вашия проект навсякъде, където пожелаете

Така че NPM е като Maven на Java или Composer на PHP, но по това време никога не ги използвам (въпреки че съм го чувал няколко пъти) и просто копирам и поставям библиотеки в моя проект. Знаейки, че има такива неща, наистина ми отваря очите, защото тогава знам, че можете лесно да инсталирате пакети към вашия проект.

Машинопис??

И така, докато работих върху моя проект, открих, че има нещо, наречено Typescript. Добре тогава си помислих, че това няма нищо общо с Javascript, но грешах. Така че Typescript е дете на Javascript според мен, защото е създаден от Javascript. Typescript е въведена надмножество на Javascript.

И така, свикнал съм с езици за програмиране, които трябва да декларират променливите си с помощта на типове като Java, C, Pascal и т.н. Също така съм наясно, че има езици за програмиране, които не се нуждаят от това, като Javascript, Python и т.н. Така че Напълно съм подготвен за това, когато влизам в Javascript среда. Това, което не знам е, че има много надмножества на Javascript и най-популярният в момента е Typescript.

Така че отначало пишех Javascript в моя проект Node.js, но след това по пътя хората продължиха да споменават Typescript в много различни форуми и документация. Помислих си какво е това Typescript? Оказва се, че Typescript е по-подредената версия на Javascript. Когато декларирате променлива, вие не просто използвате ключовата дума „let“, „var“ или „const“, но също така трябва да кажете типа на променливата. Дали е низ, цяло число, булево и т.н. Ето защо го нарекоха Typescript.

Докато Node.js не поддържа напълно ES6, Typescript използва ES6 и това не се компилира в Node.js. Така че, за да се компилира, трябва да се конвертира в ES5 с помощта на пакети като Babel. След това конвертираният файл може да бъде прочетен от Node.js. Нещо, което не съм виждал при програмиране на Java или C++.

ОБЕЩАНИЯ И ОБРАТНО ОБАЖДАНЕ ПО дяволите

Не на последно място, най-разочароващото нещо за мен са тези две функции. ОБЕЩАНИЯ и ОБРАТНИ ОБАЖДАНИЯ. Повечето, ако не всички езици за програмиране, които опитах, бяха синхронизирани, което означава, че функциите, синтаксисът и всичко върви стъпка по стъпка. Освен ако искаме да работи асинхронно, ние използваме нишки и това е съвсем друг процес. Javascript от друга страна използва асинхронен с обещание и обратни извиквания, за да върне бързо всичко, което е приключило с обработката.

Имаше смисъл в случай на разработка на интерфейса. Искате неблокиращ интерфейс, който, ако един процес все още не е завършен, просто изпълнява други процеси паралелно и показва резултата на потребителя, който от тях завърши обработката пръв. Но в backend разработката, въпреки че все още може да се използва, това не е много добро нещо и много разочароващо според мен.

Например искате да проверите дали даден потребител съществува в базата данни или не и да актуализирате името му, ако съществува. В този случай трябва да изпълните 2 заявки, заявката за избор и след това заявката за актуализиране. Да, може би има други начини да направите това само с една заявка, но това е само пример. Ето кодов фрагмент, който бих направил, ако не знаех за обратни извиквания и обещания.

Бих очаквал да регистрира актуализирания резултат, но това доведе до Няма данни. Защо? Поради обещанията (тези функции, които имат .then()верига към него). User.findOne() и User.update() са обещания, когато извикате обещания, следващият код след това е операторът if не чакайте обещанието да приключи и по този начин променливата userDataпродължава да има стойността на null събитие, въпреки че findResultвръща потребителските данни.

И така, как да го накараме да се синхронизира? Е, можем да поставим обещанието User.update()вътре в .then()на User.findOne()или... можем да използваме async изчакайте (повече за това в друга статия). Обратните повиквания са първата версия на обещанията. Те имат същата функционалност, но само в различен формат и не можете да използвате async await при обратно извикване.

Добре, така че ако изберем първия метод, който прилага обратното извикване или обещание вътре в друго обратно извикване или обещание, изглежда, че това е най-добрата практика да се направи правилно? Така е, докато не срещнете известния CALLBACK/PROMISE HELL

Обратно повикване вътре обратно повикване вътре обратно повикване, докато не създадете пирамида от обратни повиквания. Това е, което научих по трудния начин, когато използвах Node.js. Продължих да мисля с дни как мога да премахна това нещо от моя код, но не можах да намеря отговора. Така че спрях да използвам обратни извиквания и просто използвах обещания вместо това. Тъй като мога да използвам async чакане за обещания. Ако попадна на обратно извикване, първо ще го превърна в обещание и след това ще го използвам в моя код, ако потенциално може да създаде ад за обратно извикване.

Заключение

Node.js е много добър инструмент, който можете да използвате, ако искате да създадете предни или задни програми. Сега съм програмист на Node.js на пълен работен ден, въпреки че го мразех тогава. Това е много мощен стек за използване и много лесен за внедряване, ако свикнете с него. За разлика от Java или PHP, където трябва да предоставите сървъри като apache или nginx за внедряване (и също така да инсталирате Java и PHP модул отделно без xampp и т.н.), можете да стартирате Node.js само с помощта на командата node и всичко ще се стартира автоматично.

Просто когато започнете, ще бъдете разочаровани от част от синтаксиса и програмния поток на javascript, но след като свикнете с него, можете да усетите защо се използва в толкова много проекти сега в бекенд и преден интерфейс (React, Vue, Angular ).