JavaScript är ett av de mest populära programmeringsspråken i världen. Det driver miljontals webbplatser idag, och har lockat massor av utvecklare och designers att bygga funktioner för webben. Om du är ny inom programmering är JavaScript absolut ett av de bästa programmeringsspråken att börja med.
Under de första 20 åren användes JavaScript främst för skript på klientsidan. Eftersom JavaScript endast kunde användas inom <script>
-taggen var utvecklare tvungna att arbeta på flera språk och ramverk mellan frontend- och backend-komponenterna. Senare kom Node.js, som är en körningsmiljö som innehåller allt som krävs för att köra ett program skrivet i JavaScript.
Node.js är en körningsmiljö med öppen källkod som är plattformsoberoende för att skapa snabba och skalbara server- och nätverksprogram. Den körs på V8 JavaScript-körningsmotorn och använder händelsedriven, icke-blockerande I/O-arkitektur, vilket gör den effektiv och lämplig för realtidsprogram.
Vad är Node.js skrivet i?
Node.js är skriven i C, C++och JavaScript.
Wikipedia definierar Node.js som ”en förpackad sammanställning av Googles V8 JavaScript-motor, libuvplattformens abstraktionslager och ett kärnbibliotek, som i första hand är skrivet i JavaScript.”
Körningen använder Chrome V8 internt, som är JavaScript-körningsmotorn, och även den är skriven i C++. Detta lägger till ytterligare användningsområden i Node.js:s repertoar, exempelvis åtkomst till interna system funktioner (som nätverk).
Node.js arkitektur och hur den fungerar
Node.js använder arkitekturen ”Enkeltrådad händelseloop” för att hantera flera klienter samtidigt. För att förstå hur detta skiljer sig från andra körningar måste vi förstå hur samtidiga klienter hanteras på språk som Java.
I en modell med flera trådar skickar flera klienter en begäran och servern bearbetar var och en innan svaret skickas tillbaka. Flera trådar används dock för att bearbeta samtidiga anrop. Dessa trådar definieras i en trådpool, och varje gång en begäran kommer in tilldelas en enskild tråd hanteringen av den.
Node.js fungerar annorlunda. Låt oss ta en titt på varje steg:
- js upprätthåller en begränsad trådpool för att betjäna begäranden.
- När en begäran kommer placerar Node.js den i en kö.
- Nu kommer den enkeltrådiga ”händelseloopen” – kärnkomponenten – in i bilden. Den här händelseloopen väntar på begäranden under obestämd tid.
- När en begäran kommer in plockar loopen upp den från kön och kontrollerar om den kräver en blockerande indata/utdata (I/O)-åtgärd. Om inte, behandlar den begärandet och skickar ett svar.
- Om begärandet har en blockerande åtgärd att utföra tilldelar händelseloopen en tråd från den interna trådpoolen för att bearbeta begärandet. Det finns begränsade interna trådar tillgängliga. Den här gruppen med hjälptrådar kallas arbetargruppen.
- Händelseloopen spårar blockeringsbegäranden och placerar dem i kön när blockeringsuppgiften har bearbetats. Det är så den upprätthåller sin icke-blockerande natur.
Eftersom Node.js använder färre trådar använder den färre resurser/minne, vilket resulterar i snabbare körning av uppgifter. Så för våra ändamål motsvarar denna entrådiga arkitektur en arkitektur med flera trådar. När man behöver bearbeta dataintensiva uppgifter är det mycket mer meningsfullt att använda flertrådiga språk som Java. Men för realtidsapplikationer är Node.js är det självklara valet.
Funktioner i Node.js
Node.js har vuxit snabbt de senaste åren. Detta är tack vare den stora listan över funktioner som inkluderas:
- Enkel– Node.js är ganska enkel att börja med. Det är ett perfekt val för nybörjare inom webbutveckling. Med många självstudier och ett stort community – är det enkelt att komma igång.
- Skalbar– Körningsmiljön erbjuder en stor skalbarhet för applikationer. Node.js, som är enkeltrådad, kan hantera ett stort antal samtidiga anslutningar med hög genomströmning.
- Hastighet– Icke-blockerande trådkörning gör Node.js ännu snabbare och effektivare.
- Paket– En stor uppsättning Node-paket med öppen källkod.js finns tillgängliga för att förenkla ditt arbete. Det finns mer än en miljon paket i NPM-ekosystemet idag.
- Stark backend– Node.js är skriven i C och C++, vilket gör den snabb och lägger till funktioner som nätverksstöd.
- Stöd för flera plattformar – Stöd över flera plattformar gör att du kan skapa SaaS-webbplatser, skrivbordsappar och till och med mobilappar, allt med Node.js.
- Underhållbar– Node.js är ett enkelt val för utvecklare eftersom både frontend och backend kan hanteras med JavaScript som enda språk.
Marknadens storlek
Det har varit enorm tillväxt på webbplatser under de senaste 2 decennierna, och som väntat, växer även Node.js snabbt. Den populära körningsplattformen passerade 1 miljard nedladdningar redan 2018, och enligt W3Techs, används Node.js av 1,2% av alla webbplatser. Det är över 20 miljoner webbplatser över hela internet.
Det är även ett populärt val för miljontals företag. Här är några populära som använder Node.js idag:
- Spotify
- eBay
- Godaddy
Applikationer av Node.js
Node.js används för en mängd olika applikationer. Låt oss utforska några populära användningsområden där Node.js är ett bra val:
- Chattar i realtid– Tack vare sin enkeltrådiga asynkrona natur är Node.js väl lämpad för bearbetning av realtidskommunikation. Den kan enkelt skala och används ofta för att bygga chatbottar. Node.js gör det även enkelt att bygga ytterligare chattfunktioner som chatt och push-aviseringar för flera personer.
- Sakernas Internet– IoT-program består vanligtvis av flera sensorer, eftersom de ofta skickar små data som kan staplas i ett stort antal begäranden. Node.js är ett bra val eftersom det snabbt kan hantera dessa samtidiga begäranden.
- Dataströmning– Företag som Netflix använder Node.js för streamingändamål. Detta beror främst på att Node.js är lättviktig och snabb, samt att Node.js tillhandahåller ett inbyggt strömnings-API. Dessa strömmar gör det möjligt för användare att skicka begäranden till varandra, vilket resulterar i att data strömmas direkt till slutdestinationen.
- Komplexa ensidiga applikationer (SPAs)– I SPA läses hela applikationen in på en enda sida. Detta innebär vanligtvis att det finns ett par begäranden som görs i bakgrunden för specifika komponenter. Här kommer Node.js:s händelseloop till undsättning, eftersom den bearbetar begäranden på ett icke-blockerande sätt.
- REST API-baserade applikationer – JavaScript används både i frontend och backend på webbplatser. Således kan en server enkelt kommunicera med frontend via REST API: er med Node.js. Node.js tillhandahåller även paket som Express.js och Koa som gör det ännu enklare att bygga webbapplikationer.
Är Node.js ett programmeringsspråk?
Med ett ord: nej.
Node.js är inte ett programmeringsspråk. Det är snarare en körningsmiljö som används för att köra JavaScript utanför webbläsaren.
Node.js är inte heller ett ramverk (en plattform för att utveckla applikationer). Node.js bygger på ett programmeringsspråk – i det här fallet JavaScript – och hjälper till att köra själva ramverken.
Sammanfattningsvis är Node.js varken ett programmeringsspråk eller en ram. Det är en miljö för dem.
Är Node.js Frontend eller Backend?
En vanlig missuppfattning bland utvecklare är att Node.js är ett backend-ramverk och endast används för att bygga servrar. Detta är inte sant: Node.js kan användas både på frontend och backend.
En av anledningarna till att Node.js´s ramverk är ett populärt val för utvecklare som bygger en flexibel och skalbar backend är dess händelsedrivna, icke-blockerande natur. Även frontend-utvecklare kommer dock att se dessa fördelar med Node.js lika tydligt.
Låt oss ta en titt på varför Node.js fungerar för både backend och frontend:
- Återanvändbarhet – JavaScript är ett vanligt språk som används för att skriva både backend och frontend med hjälp av ramverk som Express.js och Meteor.js. Vissa populära stacks som MERN använder Express.js som backend (ett Node.js ramverk). Flera komponenter kan även återanvändas mellan frontend och backend.
- Produktivitet och utvecklareffektivitet – Tack vare en minskning av kontextväxlingen mellan flera språk kan man spara in mycket utvecklartid. Att använda JavaScript för både backend och frontend resulterar i ökad effektivitet, eftersom många verktyg är vanliga för båda.
- Enormt community – Ett blomstrande online-community har bidragit till den snabba utvecklingscykeln. När du fastnar i ett problem finns det en god chans att någon redan har löst det och delat lösningen på Stack Overflow. Node.js använder sig av detta community, som är aktivt och engagerat när det gäller denna populära körningsplattform och dess paket.
Komma igång med Node.js
Det kan vara överväldigande att bestämma var man ska börja med Node.js. Lyckligtvis är plattformen väldigt enkel att installera, och att provköra själv.
Så här installerar du Node.js
Om du redan har Node.js installerat kan du gärna gå förbi det här avsnittet.
På macOS
Använda Bash på Mac
curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
Använda Homebrew på Mac
brew install node
På Windows
Hämta Windows Installer direkt från Nodejs.org´s webbplats.
På Linux
På Ubuntu 18.04+ kan du installera Node med följande kommandon.
sudo apt update
sudo apt install nodejs
Kontrollera vilken version av Node.js som blev installerad
I föregående avsnitt installerade vi Node. Låt oss verifiera detta genom att kontrollera den installerade versionen. Kör följande kommando i terminalen.
node -v
Du kan även kontrollera det via den längre flaggan
node --version
Du bör se en utdata som liknar den här. Även om versionsnumret kan variera.
v14.16.0
Vad är NPM?
NPM är Node.js´s paketekosystem. Det är världens största ekosystem av alla bibliotek med öppen källkod, med över 1 miljon paket och det växer ständigt. NPM är kostnadsfritt att använda, och tusentals utvecklare med öppen källkod bidrar dagligen till detta system.
NPM inkluderar ett kommandoradsverktyg. Du kan helt enkelt gå över till NPM-webbplatsen för att söka efter det paket du behöver och installera det med ett enda kommando. Du kan även hantera paketets versioner, granska dependencies och till och med konfigurera anpassade skript i dina projekt via det här kommandoradsverktyget. NPM är utan tvekan den mest älskade ägodelen i Node.js´s community; Node.js lockar ett stort antal utvecklare tack vare dess utmärkta paketstöd.
Installera NPM-paket via CLI
NPM installeras automatiskt när du installerar Node.js. Vi gick igenom hur du installerade Node.js i föregående avsnitt, så låt oss nu ta en titt på kommandot för att installera ett paket med NPM:
npm install <package-name>
Ja, det är så enkelt! Du kan till och med installera flera paket samtidigt:
npm install <pkg-1> <pkg-2> <pkg-3>
Du kan även ange -g (global)-flaggan om du vill installera ett paket i den globala kontexten. På så sätt kan du använda paketet var som helst på datorn.
När du initierar ett nytt program skapar NPM automatiskt en package.json-fil som består av alla NPM-paket. Det är här du kan ange versioner, dependencies och anpassade skript.
Det finns en lång lista med kommandon som följer med NPM-verktyget, inklusive publish
, audit
, run
och mycket mer. Du kan kontrollera hur du använder dessa med npm help
-kommandot.
Populära paket
Här är några av de mest populära paketen för Node.js idag:
- Express – Express.js, eller helt enkelt Express, är ett Sinatra-inspirerat webbutvecklingsramverk för Node.js och standarden för majoriteten av Node.js´s applikationer idag.
- MongoDB – Den officiella drivrutinen till MongoDB. Den tillhandahåller API för MongoDB-objektdatabaser i Node.js.
- Socket.io – Socket möjliggör kommunikation i realtid, dubbelriktad och händelsebaserad kommunikation.
- Lodash – Lodash gör JavaScript enklare genom att ta bort besväret med att arbeta med matriser, siffror, objekt, strängar osv.
- Moment – Ett JavaScript-datumbibliotek för tolkning, validering, manipulering och formateringsdatum.
- Commander.js – Det här är allt du behöver för att arbeta och bygga med kommandoradsgränssnitt för Node.js.
- Forever – Ett enkelt CLI-verktyg för att säkerställa att ett visst skript körs kontinuerligt (dvs. för alltid). Håller din Node.js-process uppe i produktionen även under oväntade fel.
- Async – En verktygsmodul som ger enkla, kraftfulla funktioner för att arbeta med asynkront JavaScript.
- Redis – Ett klientbibliotek för att stödja Redis databasintegrering.
- Mocha – Ett rent, flexibelt JavaScript-testramverk för Node.js och webbläsaren.
- Passport – Enkel, diskret autentisering för Node.js. Passports enda syfte är att autentisera begäranden.
Hello World i Node.js
Som alltid, låt oss börja med det grundläggande ”Hello World” -programmet, där vi skapar en server i Node.js som kommer att returnera en ”Hello World” -utdata på en serverbegäran. Innan du kör igång, se till att du har en bra textredigerare.
När du har öppnat textredigeraren ska du använda den här koden för ditt ”Hello World”-program:
// server.js
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World! Welcome to Node.js');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Spara den här filen som ”server.js”. Gå nu över till terminalen och starta servern med kommandot:
node server.js
Nu börjar servern köras. Om du vill verifiera utdata ska du öppna http://localhost:3000 i webbläsaren. Du bör se meddelandet –
Hello World! Welcome to Node.js
Förklaring av Hello World Server
Node.js levereras med en inbyggd modul som heter ”HTTP” som gör det möjligt för Node.js att överföra data via HTTP (HyperText Transfer Protocol).
I koden ovan laddar vi först http-modulen i vårt program. Sedan använder vi createServer-metoden för att acceptera en begäran och returnera ett svar med en statuskod. Slutligen lyssnar vi på en definierad port.
Grattis – du har precis skapat din första server i Node.js! I nästa avsnitt får du lära dig hur du använder Express-ramverket för att skapa en server.
Skapa server med Express
Allra först bör vi diskutera vad en server är. En server ansvarar för att ta klientbegäranden via sin programvara (oftast Apache eller Nginx), utföra den nödvändiga uppsättningen uppgifter och slutligen skicka svar tillbaka till klienterna. Express är ett ramverk som hjälper oss att skapa en server i Node.
Express.js är ett minimalt och flexibelt Node.js webbapplikationsramverk som ger en robust uppsättning funktioner för webb- och mobilapplikationer. Det gör det möjligt att lägga till rutttabeller och ställa in mellanprogram i din applikation. Du kan installera Express med kommandot nedan.
npm install express --save
I föregående avsnitt använde vi det inbyggda http-verktyget för att skapa en server. Nu ska vi skapa en ”Hello World”-server med Express.js.
Öppna textredigeraren och ange den här koden:
// server-express.js
const express = require('express')
const app = express() // initialize app
const port = 3000
// GET callback function returns a response message
app.get('/', (req, res) => {
res.send('Hello World! Welcome to Node.js')
})
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`)
})
Därefter kör vi vår server med följande kommando.
node server-express.js
Kontrollera nu http://localhost:3000 i din webbläsare för att se ”Hello World” -utdatan.
Sammanfattning
Node.js är en populär programmeringsmiljö som kan användas för att skapa storskaliga program som behöver stödja ett flertal samtidiga begäranden. Entrådig icke-blockerande I/O gör det till ett utmärkt val även för realtids- och dataströmningsprogram.
Till råga på allt har Node.js även ett massivt community av aktiva utvecklare samt världens största paketförvar med öppen källkod, NPM, som för närvarande innehåller över en miljon paket.
Det är enkelt att komma igång med Node.js. Vi har gått igenom hur du installerar och skapar en server i Node.js, så allt som återstår är att överväga hur du ska använda och implementera Node.js i din egen stack. Du kan även utöka dina kunskaper genom att besöka den officiella Node.js-dokumentationen på Nodejs.dev.