Panduan lengkap untuk kerangka kerja Node.js

Node.js adalah runtime JavaScript, dibangun di atas mesin JavaScript V8 Chrome, yang cocok untuk menerapkan aplikasi desktop dan server. Node.js menggunakan model I / O non-pemblokiran berbasis peristiwa yang membuatnya lebih ringan dan efisien dibandingkan dengan server berulir, seperti Apache, IIS, dan server Java pada umumnya.

Meskipun Anda dapat menerapkan server web atau aplikasi sepenuhnya dalam kode Node.js biasa, kerangka kerja dapat sangat mengurangi jumlah kode yang perlu Anda tulis. Dalam panduan ini, kami mensurvei keseluruhan kerangka kerja yang tersedia untuk pengembang Node.js.

Kita mulai dengan kerangka kerja minimalis mirip Sinatra seperti Express, pindah ke kerangka kerja mirip Rails yang lebih beropini seperti Sails.js, lalu ke kerangka kerja tumpukan penuh dengan perancah dan pustaka persistensi seperti Meteor. Terakhir, kami membahas kerangka kerja REST API seperti LoopBack, dan beberapa pustaka "lainnya" untuk tujuan yang berada di luar kategori utama kami (seperti ORM, IoT, dan pembuatan situs statis).

Perhatikan bahwa klasifikasi tidak dipisahkan dengan baik. Ada beberapa kerangka kerja yang dapat dianggap termasuk dalam beberapa kategori.

Perhatikan bahwa ada lebih banyak proyek MVC Node.js daripada yang saya cantumkan di sini. Dalam beberapa kasus, saya menghapus proyek yang tidak lagi aktif. Di sisi lain, saya menghilangkan kerangka kerja yang tidak pernah menarik minat pengembang yang signifikan meskipun ada aktivitas berkelanjutan. Tujuan saya bukan untuk memberi tahu Anda tentang setiap proyek yang mungkin, tetapi untuk membantu Anda mengidentifikasi proyek yang mungkin sepadan dengan waktu evaluasi Anda.

Framework MVC untuk Node.js

MVC (model-view-controller) adalah paradigma yang dimaksudkan untuk mempartisi fungsionalitas desktop atau aplikasi web dengan rapi. Model tersebut mengelola struktur data yang mendasarinya. Tampilan mengatur apa yang ditampilkan kepada pengguna. Dan pengontrol mengelola apa yang terjadi sebagai tanggapan atas permintaan pengguna.

Rails adalah kerangka kerja web berbasis MVC dengan fitur lengkap dan “beropini” yang dibuat pada tahun 2004 oleh David Heinemeier Hansson (alias DHH) untuk memberi Ruby cara membangun keberadaan web. Rails mengasumsikan bahwa Anda menggunakan database, konvensi nilai di atas konfigurasi, dan diskalakan dengan baik. Kerangka kerja Node.js MVC seperti Rails adalah kerangka kerja yang memiliki fitur lengkap.

Sinatra adalah kerangka kerja web berbasis MVC yang sangat sederhana dan tidak terlalu beropini yang dibuat pada tahun 2007 oleh Blake Mizerany dan saat ini dikelola oleh Konstantin Haase. Sinatra mengambil pendekatan kebalikan dari Rails karena hanya memiliki apa yang Anda butuhkan untuk aplikasi web, pada dasarnya mengarahkan untuk meletakkan aplikasi Anda di web dengan DSL (bahasa khusus domain) di atas lapisan "rak". Rack adalah lapisan abstraksi berdasarkan Node.js EventEmitter, dan menyediakan cara sederhana untuk menangani dukungan cluster.

Kerangka kerja MVC Node.js mirip Sinatra adalah kerangka kerja yang dimulai dengan sederhana dan memungkinkan Anda menambahkan komponen sesuai kebutuhan. Banyak kerangka kerja MVC Node.js mirip Sinatra, pada kenyataannya, menghargai konvensi atas konfigurasi, jadi garis antara kerangka ini dan kerangka kerja mirip Rails tidak selalu jelas.

Video terkait: Tip dan trik Node.js

Dalam video penjelas ini, pelajari beberapa teknik yang dapat meningkatkan pengalaman pengembangan Node Anda.

Kerangka kerja MVC mirip Sinatra untuk Node.js

Diet

Diet menyebut dirinya sebagai kerangka kerja web Node.js modular kecil yang bagus untuk membuat aplikasi dan API yang cepat dan dapat diskalakan. Server Diet dasar terlihat sangat mirip dengan server Express dasar:

// Buat aplikasi

  var server = membutuhkan ('diet')

  var app = server ()

  app.listen ('// localhost: 8000')

// Ketika // localhost: 8000 / diminta, tanggapi dengan “Hello World!”

  app.get ('/', fungsi ($) {

  $ .end ('Halo Dunia!')

  })

Diet memiliki struktur yang mendukung hosting virtual tanpa modul atau konfigurasi tambahan. Instance server diet berfungsi sebagai host virtual. Biarkan mereka mendengarkan di port yang berbeda.

Perutean dalam Diet tidak hanya menangani jalur tertentu dengan fungsi anonim, seperti pada app.get()contoh di atas, tetapi juga dapat membuat jalur middleware:

// Daftarkan fungsi middleware untuk jalur unggahan

  app.post ('/ upload / gambar', unggah, potong, simpan, selesaikan)

Node.js secara default memiliki dua argumen, requestdan response, saat membuat server HTTP (s) menggunakan http.createServer(). Diet menggabungkan kedua objek ini menjadi satu objek sinyal yang diwakili oleh tanda dolar $. Anda dapat melihat pada app.get()contoh di atas bahwa objek sinyal adalah argumen untuk fungsi yang menangani getpermintaan di jalur root. Diet juga mendukung modul Node.js dan dapat menggunakannya sebagai middleware, seperti yang ditunjukkan pada app.post()contoh di atas.

Mengekspresikan

Express adalah framework aplikasi web Node.js yang minimal dan fleksibel, menyediakan sekumpulan fitur yang kuat untuk membangun aplikasi web tunggal, multi-halaman, dan hybrid. Express API menangani aplikasi web, permintaan dan tanggapan HTTP, perutean, dan middleware. Mulai Express 4.x, middleware yang didukung untuk Express berada di sejumlah repositori terpisah, terdaftar di repo Connect.

Beberapa garpu dan tambahan untuk Express telah muncul, termasuk Lokomotif, Hapi, dan Koa. Koa dibuat oleh salah satu kontributor utama Express.

Meskipun Express lebih tua dan memiliki footprint yang lebih besar dibandingkan dengan cabang atasnya, Express masih memiliki komunitas yang lebih besar dan stabilitas yang lebih baik daripada mereka. Saya terus-menerus melihat Express dimasukkan ke dalam kerangka kerja dan alat lain tanpa komentar, seolah-olah itu adalah satu-satunya pilihan yang mungkin untuk membangun server web di Node.js.

// buat aplikasi ekspres

const express = membutuhkan ('express')

aplikasi const = express ()

app.get ('/', function (req, res) {

res.send ('Halo dunia!')

})

app.listen (3000, function () {

console.log ('Contoh aplikasi mendengarkan pada port 3000!)

})

Seterika

Flatiron adalah bagian dari rangkaian alat Nodejitsu Node. Penulis menganggap Flatiron sebagai dua hal: Pertama, inisiatif untuk membangun kumpulan alat yang dipisahkan dengan standar kualitas dan kinerja yang tinggi. Dan kedua, kerangka pengembangan aplikasi web full-stack yang mengemas alat-alat ini bersama-sama untuk membuat pengembangan aplikasi berbasis isomorfik dan aliran lebih mudah.

Flatiron mirip dengan Sinatra karena semua yang perlu Anda lakukan untuk menggunakannya sebagai server web adalah require, membuat instantiate aplikasi, dan menggunakan plugin http, mengatur beberapa rute, dan memulai aplikasi, seperti yang ditunjukkan pada gambar di bawah.

Bagian lain dari suite melengkapi fungsionalitas flatiron. Misalnya Broadway mengekspos API "plugin" sederhana, menggantikan inversi pendaftaran kontrol yang digunakan oleh framework Node MVC lainnya. Union adalah kernel middleware hybrid buffered / streaming, yang kompatibel dengan Connect. Union adalah bagian yang memasok plugin http.

// buat aplikasi flatiron

var flatiron = membutuhkan ('flatiron'), 

  app = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get ('/', function () {

  this.res.writeHead (200, {'Content-Type': 'text / plain'});

  this.res.end ('Halo dunia! \ n');

});

app.start (8080);

Hapi

Hapi adalah kerangka kerja yang mudah digunakan dan berpusat pada konfigurasi dengan dukungan bawaan untuk validasi input, caching, otentikasi, dan fasilitas penting lainnya untuk membangun aplikasi web dan layanan. Hapi memungkinkan pengembang untuk fokus pada penulisan logika aplikasi yang dapat digunakan kembali melalui pendekatan yang sangat modular dan preskriptif. Hapi dikembangkan oleh Walmart Labs dan merupakan pilihan yang baik untuk tim besar dan proyek besar.

Hapi awalnya dibangun di atas Express, tetapi kemudian didesain ulang agar berdiri sendiri. Seperti yang dikatakan penciptanya, Hapi dibangun dengan ide bahwa konfigurasi lebih baik daripada kode dan logika bisnis harus diisolasi dari lapisan transport. Pada contoh di bawah, perhatikan seberapa jelas dan bersih konfigurasi rute server yang muncul di kode.

// buat server hapi

var Hapi = membutuhkan ('hapi');

var server = new Hapi.Server (3000);

server.route ([

  {

    metode: 'GET',

    jalur: '/ api / items',

    handler: function (request, reply) {

      reply ('Dapatkan id item');

    }

  },

  {

    metode: 'GET',

    jalur: '/ api / items / {id}',

    handler: function (request, reply) {

      reply ('Dapatkan id item:' + request.params.id);

    }

  },

Koa

Koa adalah kerangka kerja web baru yang dirancang oleh tim di belakang Express, tetapi tidak bergantung pada kode Express. Koa bertujuan untuk menjadi fondasi yang lebih kecil, lebih ekspresif, dan lebih kuat untuk aplikasi web dan API. Koa menggunakan generator ES6 untuk middleware daripada callback Node.js. Berikut ini adalah aplikasi Koa “Hello, World” menggunakan generator, yang melakukan a yield nextuntuk meneruskan kontrol ke generator berikutnya:

var koa = membutuhkan ('koa');

var app = koa ();

// x-waktu-respons

app.use (fungsi * (berikutnya) {

  var start = new Date;

  hasil berikutnya;

  var ms = Tanggal baru - mulai;

  this.set ('X-Response-Time', ms + 'ms');

});

// respon

app.use (function * () {

  this.body = 'Halo Dunia';

});

app.listen (3000);

Ada perbedaan antara generator middleware yang digunakan oleh Koa dan callback seperti yang digunakan oleh Express dan Connect. Implementasi Connect hanya melewati kontrol melalui serangkaian fungsi sampai salah satunya kembali, sementara Koa menghasilkan "downstream", lalu kontrol mengalir kembali "upstream".

Dalam contoh di atas, x-response-time “membungkus” generator respons, dengan yield nextpernyataan yang menandai panggilan tersebut. Menghasilkan lebih fleksibel daripada panggilan fungsi eksplisit, karena memudahkan untuk memasukkan generator lain ke dalam urutan, misalnya logger web antara timer dan respons.

Lokomotif

Lokomotif adalah kerangka kerja web untuk Node.js yang mendukung pola MVC, rute RESTful, dan konvensi atas konfigurasi (seperti Rails), sambil berintegrasi secara mulus dengan database dan mesin templat apa pun. Lokomotif dibangun di atas Express and Connect.

Lokomotif menambahkan Express beberapa struktur mirip Ruby-on-Rails, yang dapat Anda lihat pada gambar di bawah. Tampilan lokomotif sering kali berupa file JavaScript (html.ejs) yang disematkan, seperti yang ditunjukkan di sini, tetapi Lokomotif juga mendukung Jade dan mesin templat lain yang sesuai untuk Express. Fungsionalitas REST dikontrol oleh rute, seperti yang biasanya terjadi di server berbasis Express. Anda dapat menggunakan database dan lapisan ORM apa pun yang Anda inginkan dengan Lokomotif. Panduan ini mendemonstrasikan penggunaan MongoDB dengan Mongoose, serta menggunakan Passport untuk otentikasi pengguna.

Total.js

Total.js adalah kerangka kerja sisi server berfitur lengkap untuk Node.js, ditulis dalam JavaScript murni, mirip dengan Laravel PHP atau Django Python. Platform Total.js adalah kumpulan pustaka, paket, dan produk jadi yang dibangun dengan Total.js.

Total.js lebih mirip Sinatra daripada Rails karena bersifat modular, dan karena agnostik tentang IDE, database, dan kerangka kerja sisi klien. Server web Total.js minimal dapat diimplementasikan dengan kode berikut:

membutuhkan ('total.js');

F.route ('/', function () {

    this.plain ('total.js sangat bagus!');

});

F.http ('debug');

Video terkait: Tip dan trik Node.js

Framework MVC mirip Rails untuk Node.js

Adonis

Adonis adalah framework MVC untuk Node.js yang dibuat berdasarkan kasus penggunaan praktis. Ini mendukung injeksi ketergantungan dan memiliki wadah IoC (inversi kontrol) ramping untuk membantu Anda menyelesaikan dan meniru dependensi. Adonis menyediakan alat CLI untuk membuat perancah dan menghasilkan proyek dengan semua dependensi yang diperlukan.

Di antara fitur Adonis adalah implementasi ORM (Lucid) dan pola desain rekaman aktif; lapisan otentikasi yang dibundel dengan sesi, JWT, otentikasi dasar, dan token API pribadi; dan implementasi pengontrol sebagai kelas ES2015. Generator ES2015 menghilangkan callback berantakan yang umum di JavaScript lama. Kode berikut mengambil semua pengguna dari database dan mengembalikannya sebagai JSON:

Const Route = gunakan ('Route')

const Pengguna = gunakan ('Aplikasi / Model / Pengguna')

Route.get ('/', function * (request, response) {

  pengguna const = menghasilkan User.all ()

  response.json (pengguna)

})

CompoundJS

Rumus di balik CompoundJS adalah Express + struktur + ekstensi. Di sini struktur adalah tata letak standar direktori, dan ekstensi adalah modul Node.js yang menambahkan fungsionalitas ke kerangka kerja. Tujuannya adalah untuk menyediakan antarmuka yang jelas dan terorganisir dengan baik untuk pengembangan aplikasi yang kompatibel dengan Express. Ini berarti bahwa semua yang berfungsi dengan Express akan berfungsi dengan CompoundJS.

Anda dapat membuat aplikasi CompoundJS kerangka dari CLI:

npm instal senyawa -g

majemuk init todo-list-app

cd todo-list-app && instal npm

simpul.

Situs ini mendengarkan // localhost: 3000 / secara default. Anda dapat menambahkan scaffolding berdasarkan model dengan compound generate scaffoldperintah.

Geddy

Kerangka kerja Geddy mengimplementasikan MVC untuk Node.js dengan cara yang sangat mirip Rails, bahkan hingga ke struktur direktori, kemampuan untuk membuka konsol REPL dalam konteks aplikasi, dan skrip generator yang dapat Anda gunakan untuk membuat aplikasi, sumber daya perancah, atau model dan pengontrol telanjang. Scaffolding secara opsional dapat menghasilkan template EJS, Jade, Handlebars, Moustache, dan Swig.

The geddy jakeperintah dapat menjalankan berbagai Jake (JavaScript make) tugas dalam konteks aplikasi saat ini, dengan akses penuh ke model. Ini berguna untuk tugas tambahan seperti pengujian, menginisialisasi database pengembangan, dan membuat daftar rute.

Kraken

Kraken, proyek open source PayPal, adalah lapisan aman dan dapat diskalakan yang memperluas Express dengan menyediakan struktur dan konvensi, seperti Lokomotif. Meskipun Kraken adalah pilar utama kerangka kerjanya, modul berikut juga dapat digunakan secara independen: Lusca (keamanan), Kappa (NPM Proxy), Makara (LinkedIn Dust.js i18N), dan Adaro (LinkedIn Dust.js Templating).