Så kommer du igång med Node.js

Först och främst så kanske jag ska skriva lite om vad Node.js är för något. Som du ser av filändelsen så är det ett JavaScript-språk och används på serversidan för att kommunicera med exempelvis en webbklient (webbläsare).

Node.js är eventbaserat, litet och lätt till skillnad mot exempelvis Apache. Dock är det värt att notera att Node.js inte är är skapat för att lösa alla problem utan har uppstått från realtidswebbens behov av snabb, skalbar och minnessnål.

Prestandamässigt så kan Node.js jämföras med Nginx (när enbart webbsidor levereras). Bland användare av Node.js så kan Yammer och Plurk nämnas.

– Installation –

Ladda hem källkoden som tar.gz eller zip från Github: https://github.com/joyent/node eller med kommandot:

$ git clone git://github.com/ry/node.git

Gå sedan in i katalogen som skapats och skriv ./configure och då skall det varna om något saknas, sen är det bara skriva make. Ta en kopp kaffe och vänta några minuter. Bland annat så byggs Googles V8 JavaScript-motor.

Om du som jag använder FreeBSD så kommer din byggprocess att misslyckas på två ställen, först och främst så måste du använda gmake istället för make och sedan så måste du lägga på den patch som återfinnes här.

'build' finished successfully (2m10.790s)
$ ./node -v
v0.5.0-pre

För att lättare komma åt node-binären samt dess verktyg så glöm inte att skriva gmake install (eller make install).

– Hello world med Node.JS –

Nu är det dags att skriva vårt första script samt se till att Node hanterar detta program korrekt. Scriptet helloworld.js ser ut enligt följande:

var sys = require("sys");
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80);

console.log('Server running at port 80');

Sedan för att se till att node exekverar och levererar ovan på TCP port 80 så skriver vi enligt följande:

$ sudo node helloworld.js
Server running at port 80

Observera att du måste köra detta med root-behörighet eftersom vi lyssnar på port 80. Många väljer att använda port 8080 eller liknande men det är inget jag rekommenderar eftersom många brandväggar ej släpper igenom denna port. Läs denna guide hur du undviker att köra som root men ändå kan använda port 80. Att köra program som root är något som du vill undvika i största mån då detta kan innebära en säkerhetsrisk.

Koden ovan är tämligen självförklarande. Om du vill använda Nginx + PHP på samma server så kan du binda till olika IP-nummer genom att ändra .listen(80); till .listen(80, ”1.2.3.4″); eller det IP-nummer du vill binda till. Du måste även binda Nginx till det andra IP-nummret.

Node.JS i bakgrunden

Om du vill ha möjligheten att lägga program i bakgrunden vilket är troligt i en skarp miljö så måste du göra enligt följande förfarande då det saknas en modul vid namn daemon.node.

  1. Ladda hem koden från https://github.com/Slashed/daemon.node
  2. Kompilera med hjälp av verktyget node-waf (följer med Node.JS) på följande sätt: node-waf configure build
  3. Lägg den binär med sökväg build/default/daemon.node i samma mapp som helloworld.js
  4. Byt ut koden mot nedan där två rader är tillagda:
var sys = require("sys");
var daemon = require("./daemon");
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80);

console.log('Server running at port 80');
daemon.start();

Startar du helloworld.js nu så läggs tjänsten i bakgrunden.

Trevligt! Hör av dig om du har några frågor. Nästa gång så går jag in på hur du kan kommunicera lätt mellan Redis och webbläsaren med hjälp av Node.JS

3 reaktioner på ”Så kommer du igång med Node.js

  1. Tack Jonas för en bra introduktion. Det är alltid lika glädjande att läsa något välskrivet av det här slaget på svenska, det händer ju så sällan.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>