Meskipun mengenal JavaScript dengan cukup baik, saya bingung apa yang sebenarnya dilakukan ketiga proyek di ekosistem Node.js ini. Apakah itu seperti Rails 'Rack? Bisakah seseorang tolong jelaskan?
Meskipun mengenal JavaScript dengan cukup baik, saya bingung apa yang sebenarnya dilakukan ketiga proyek di ekosistem Node.js ini. Apakah itu seperti Rails 'Rack? Bisakah seseorang tolong jelaskan?
Jawaban:
[ Pembaruan: Pada rilis 4.0, Express tidak lagi menggunakan Connect. Namun, Express masih kompatibel dengan middleware yang ditulis untuk Connect. Jawaban asli saya di bawah.]
Saya senang Anda bertanya tentang ini, karena itu pasti merupakan titik kebingungan umum bagi orang-orang yang melihat Node.js. Inilah cara terbaik saya menjelaskannya:
Node.js sendiri menawarkan modul http , yang createServer
metodenya mengembalikan objek yang dapat Anda gunakan untuk menanggapi permintaan HTTP. Objek itu mewarisi http.Server
prototipe.
Connect juga menawarkan createServer
metode, yang mengembalikan objek yang mewarisi versi diperpanjang http.Server
. Ekstensi Connect ada di sana untuk memudahkan memasang middleware . Itu sebabnya Connect menggambarkan dirinya sebagai "kerangka kerja middleware," dan sering dianalogikan dengan Ruby Rack.
Express tidak untuk Menghubungkan apa yang dilakukan Connect ke modul http: Menawarkan createServer
metode yang memperluas Server
prototipe Connect . Jadi semua fungsi Connect ada di sana, ditambah tampilan rendering dan DSL yang praktis untuk menggambarkan rute. Sinatra Ruby adalah analogi yang bagus.
Lalu ada kerangka kerja lain yang melangkah lebih jauh dan memperluas Express! Zappa , misalnya, yang mengintegrasikan dukungan untuk CoffeeScript, jQuery sisi-server, dan pengujian.
Berikut ini adalah contoh nyata dari apa yang dimaksud dengan "middleware": Di luar kotak, tidak ada di atas yang menyajikan file statis untuk Anda. Tapi cukup lemparkan connect.static
(middleware yang datang dengan Connect), yang dikonfigurasikan untuk menunjuk ke direktori, dan server Anda akan memberikan akses ke file di direktori itu. Perhatikan bahwa Express juga menyediakan middlewares Connect; express.static
sama dengan connect.static
. (Keduanya dikenal staticProvider
sampai saat ini.)
Kesan saya adalah bahwa sebagian besar aplikasi Node.js "nyata" sedang dikembangkan dengan Express hari ini; fitur yang ditambahkannya sangat berguna, dan semua fungsionalitas tingkat rendah masih ada jika Anda menginginkannya.
Jawaban yang diterima benar-benar tua (dan sekarang salah). Inilah informasi (dengan sumber) berdasarkan versi Connect (3.0) / Express (4.0) saat ini.
http / https createServer
yang hanya membutuhkan callback (req, res) misalnya
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
Middleware pada dasarnya adalah perangkat lunak apa pun yang berada di antara kode aplikasi Anda dan beberapa API tingkat rendah. Connect memperluas fungsionalitas server HTTP bawaan dan menambahkan kerangka kerja plugin. Plugin bertindak sebagai middleware dan karenanya terhubung adalah kerangka kerja middleware
Caranya cukup sederhana ( dan sebenarnya kodenya sangat pendek! ). Segera setelah Anda menelepon, var connect = require('connect'); var app = connect();
Anda mendapatkan fungsi app
yang dapat:
.use
( sumber ) untuk mengelola plugin ( yang berasal dari sini karena baris kode sederhana ini ).Karena 1.) Anda dapat melakukan hal berikut:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
Kombinasikan dengan 2.) dan Anda mendapatkan:
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connect menyediakan fungsi utilitas untuk mendaftarkan diri http
sehingga Anda tidak perlu melakukan panggilan http.createServer(app)
. Disebut listen
dan kode hanya membuat server http baru, register terhubung sebagai panggilan balik dan meneruskan argumen http.listen
. Dari sumber
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Jadi, Anda bisa melakukan:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
Itu masih tua baikmu http.createServer
dengan kerangka plugin di atas.
ExpressJS dan terhubung adalah proyek paralel. Connect hanyalah kerangka middleware, dengan use
fungsi yang bagus . Express tidak tergantung pada Connect ( lihat package.json ). Namun itu tidak semua yang terhubung tidak yaitu:
createServer
like connect karena itu juga hanya fungsi yang dapat mengambil req
/ res
pasang ( sumber ).listen
Fungsi utilitas untuk mendaftarkan dirinya dengan httpSelain menyediakan apa yang terhubung (yang mengekspresikan duplikat), ia memiliki banyak fitur. misalnya
The use
fungsi ExpressJS dan connect kompatibel dan oleh karena itu middleware dibagi . Keduanya merupakan kerangka kerja middleware, express hanya memiliki lebih dari kerangka middleware sederhana .
Pendapat saya: Anda cukup informasi ^ berdasarkan di atas ^ untuk membuat pilihan Anda sendiri.
http.createServer
jika Anda membuat sesuatu seperti connect / expressjs dari awal.http.createServer
Kebanyakan orang harus menggunakan ExpressJS.
Ini mungkin benar karena beberapa titik waktu, tetapi salah sekarang:
yang mewarisi versi diperpanjang dari http.Server
Salah. Itu tidak meluas dan seperti yang Anda lihat ... menggunakannya
Express tidak untuk Menghubungkan apa yang dilakukan Connect ke modul http
Express 4.0 bahkan tidak bergantung pada koneksi. lihat bagian dependensi package.json saat ini
Node.js adalah motor javascript untuk sisi server.
Selain semua kemampuan js, ini mencakup kemampuan jaringan (seperti HTTP), dan akses ke sistem file.
Ini berbeda dari sisi klien di mana tugas-tugas jaringan dimonopoli oleh browser, dan akses ke sistem file dilarang untuk alasan keamanan.
Sesuatu yang berjalan di server, memahami HTTP dan dapat mengakses file terdengar seperti server web. Tapi itu bukan satu.
Untuk membuat node.js berperilaku seperti server web, Anda harus memprogramnya: menangani permintaan HTTP yang masuk dan memberikan respons yang sesuai.
Inilah yang dilakukan Express: ini adalah implementasi dari server web di js.
Dengan demikian, mengimplementasikan situs web seperti mengkonfigurasi rute Express, dan memprogram fitur spesifik situs.
Melayani halaman melibatkan sejumlah tugas. Banyak dari tugas-tugas tersebut diketahui dan sangat umum, sehingga modul Connect node (salah satu dari banyak modul yang tersedia untuk dijalankan di bawah node) mengimplementasikan tugas-tugas tersebut.
Lihat penawaran mengesankan saat ini:
Connect adalah kerangka kerja dan melaluinya Anda dapat memilih (sub) modul yang Anda butuhkan.
Halaman Contrib Middleware menyebutkan daftar panjang middlewares tambahan .
Express sendiri hadir dengan middlewares Connect yang paling umum.
Instal node.js.
Node dilengkapi dengan npm , manajer paket simpul .
Perintah npm install -g express
akan mengunduh dan menginstal express secara global (lihat panduan express ).
Berjalan express foo
di baris perintah (bukan di simpul) akan membuat aplikasi siap-pakai yang bernama foo. Ubah ke direktori (yang baru dibuat) dan jalankan dengan simpul dengan perintah node <appname>
, lalu buka http://localhost:3000
dan lihat. Sekarang kamu masuk
Node.js
itu sendiri menawarkan modul HTTP, yang metode createServer mengembalikan objek yang dapat Anda gunakan untuk menanggapi permintaan HTTP. Objek itu mewarisi http.Server
prototipe.
Informasi terkait, terutama jika Anda menggunakan NTVS untuk bekerja dengan Visual Studio IDE. NTVS menambahkan alat NodeJS dan Express, perancah, templat proyek ke Visual Studio 2012, 2013.
Juga, kata-kata yang menyebut ExpressJS atau Connect sebagai "WebServer" tidak benar. Anda dapat membuat WebServer dasar dengan atau tanpa mereka. Program NodeJS dasar juga dapat menggunakan modul http untuk menangani permintaan http, sehingga menjadi server web yang belum sempurna.
middleware seperti namanya sebenarnya middleware duduk di tengah .. tengah apa? di tengah permintaan dan respons .. bagaimana permintaan, tanggapan, server kilat duduk di aplikasi kilat dalam gambar ini Anda dapat melihat permintaan berasal dari klien maka server server kilat melayani permintaan tersebut .. kemudian mari kita gali lebih dalam .. sebenarnya kita bisa membagi ini seluruh tugas server ekspres keseluruhan ke tugas-tugas terpisah kecil seperti dengan cara ini. bagaimana middleware duduk di antara permintaan dan respons sebagian kecil dari bagian server melakukan beberapa tugas tertentu dan meneruskan permintaan ke tugas berikutnya .. akhirnya melakukan semua tugas tanggapan yang telah dibuat .. semua perangkat menengah dapat mengakses objek permintaan, objek respons, dan fungsi permintaan berikutnya siklus respons ..
ini adalah contoh yang baik untuk menjelaskan middleware dalam video youtube ekspres untuk middleware