Server File Statis

Server File Statis

Aplikasi web memerlukan file - file statis seperti CSS, font dan gambar atau file - file library JavaScript agar aplikasi web bekerja sebagaimana mestinya. File - file ini sengaja dipisahkan agar terstruktur dan secarabest practices file - file ini memang harus dipisahkan. Lalu bagaimana caranya Node.js bisa menyediakan file - file ini ?...ok mari kita buat server Node.js yang fungsinya untuk menyediakan file statis.

Agar server Node.js bisa mengirimkan file statis ke klien maka server perlu mengetahui path atau tempat dimana file tersebut berada.

Node.js bisa mengirimkan file tersebut secara streaming melalui fungsifs.createReadStream(). Sebelum dijelaskan lebih lanjut mungkin bisa dilihat atau di coba saja server file Node.js dibawah ini

server-file.js

var http = require('http'), parse = require('url').parse, join = require('path').join, fs = require('fs'), root = join(__dirname, 'www'), PORT = 3300, server = http.createServer(function(req, res){ var url = parse(req.url), path = join(root, url.pathname), stream = fs.createReadStream(path); stream.on('data', function(bagian){ res.write(bagian); }); stream.on('end', function(){ res.end(); }); stream.on('error', function(){ res.setHeader('Content-Type','text/html'); var url_demo = "http://localhost:"+PORT+"/index.html"; res.write("coba buka <a href="+url_demo+">"+url_demo+"</a>"); res.end(); }) }); server.listen(PORT); console.log('Port '+PORT+': Server File ');

Berikut sedikit penjelasan dari kode diatas

__dirname merupakan variabel global yang disediakan oleh Node.js yang berisi path direktori dari file yang sedang aktif mengeksekusi __dirname.root merupakan direktori root atau referensi tempat dimana file-file yang akan dikirimkan oleh server Node.js. Pada kode server diatas direktori root di setting pada direktori www.path adalah path file yang bisa didapatkan dengan menggabungkan path direktori root dan pathname. pathnameyang dimaksud di sini misalnya jika URL yang diminta yaituhttp://localhost:3300/index.html maka pathname adalah/index.html. Nilai variabelpath dihasilkan dengan memakai fungsi join().var path = join(root, url.pathname) stream yang di kembalikan oleh fungsi fs.createReadStream()merupakan classstream.Readable. Objekstream ini mengeluarkan data secara streaming untuk di olah lebih lanjut. Perlu menjadi catatan bahwa stream.Readable tidak akan mengeluarkan data jikalau tidak di kehendaki. Nah...cara untuk mendeteksi data streaming ini sudah siap di konsumsi atau belum adalah melalui event.

Event yang di dukung oleh classstream.Readable adalah sebagai berikut

Event: readableEvent: dataEvent: endEvent: errorEvent: close

Mungkin anda bertanya kenapa server file statis diatas memakai stream, bukankah menyediakan file secara langsung saja sudah bisa? jawabannya memang bisa, tetapi mungkin tidak akan efisien kalau file yang akan di berikan ke client mempunyai ukuran yang besar. Coba lihat kode berikut

var http = require('http'); var fs = require('fs'); var server = http.createServer(function (req, res) { fs.readFile(__dirname + '/data.txt', function (err, data) { res.end(data); }); }); server.listen(8000);

Jika file data.txt terlalu besar maka buffer yang digunakan oleh sistem juga besar dan konsumsi memori juga akan bertambah besar seiring semakin banyak pengguna yang mengakses file ini.

Jika anda ingin lebih banyak mendalami tentang Node.js Stream silahkan lihat resource berikut (dalam Bahasa Inggris):

Node.js API StreamStream Handbook

Lebih baru Lebih lama