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?
node.js
middleware
tillda
sumber
sumber
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 mewarisihttp.Server
prototipe.Connect juga menawarkan
createServer
metode, yang mengembalikan objek yang mewarisi versi diperpanjanghttp.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 memperluasServer
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 denganconnect.static
. (Keduanya dikenalstaticProvider
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.
sumber
Jawaban yang diterima benar-benar tua (dan sekarang salah). Inilah informasi (dengan sumber) berdasarkan versi Connect (3.0) / Express (4.0) saat ini.
Apa Node.js datang dengan
http / https
createServer
yang hanya membutuhkan callback (req, res) misalnyaApa yang terhubung menambahkan
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 fungsiapp
yang dapat:.use
( sumber ) untuk mengelola plugin ( yang berasal dari sini karena baris kode sederhana ini ).Karena 1.) Anda dapat melakukan hal berikut:
Kombinasikan dengan 2.) dan Anda mendapatkan:
Connect menyediakan fungsi utilitas untuk mendaftarkan diri
http
sehingga Anda tidak perlu melakukan panggilanhttp.createServer(app)
. Disebutlisten
dan kode hanya membuat server http baru, register terhubung sebagai panggilan balik dan meneruskan argumenhttp.listen
. Dari sumberJadi, Anda bisa melakukan:
Itu masih tua baikmu
http.createServer
dengan kerangka plugin di atas.Apa yang ditambahkan ExpressJS
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 mengambilreq
/res
pasang ( sumber ).listen
Fungsi utilitas untuk mendaftarkan dirinya dengan httpSelain menyediakan apa yang terhubung (yang mengekspresikan duplikat), ia memiliki banyak fitur. misalnya
Middleware dibagikan
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 .Yang mana yang harus Anda gunakan?
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.
Apa yang salah dengan jawaban yang diterima
Ini mungkin benar karena beberapa titik waktu, tetapi salah sekarang:
Salah. Itu tidak meluas dan seperti yang Anda lihat ... menggunakannya
Express 4.0 bahkan tidak bergantung pada koneksi. lihat bagian dependensi package.json saat ini
sumber
node.js
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.
node.js sebagai server web: express
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.
Middleware dan Connect
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.
Apa yang harus dilakukan?
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 perintahnode <appname>
, lalu bukahttp://localhost:3000
dan lihat. Sekarang kamu masuksumber
Connect menawarkan API "tingkat lebih tinggi" untuk fungsionalitas server HTTP umum seperti manajemen sesi, otentikasi, pencatatan dan banyak lagi. Express dibangun di atas Connect dengan fungsionalitas canggih (seperti Sinatra).
sumber
Node.js
itu sendiri menawarkan modul HTTP, yang metode createServer mengembalikan objek yang dapat Anda gunakan untuk menanggapi permintaan HTTP. Objek itu mewarisihttp.Server
prototipe.sumber
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.
sumber
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
sumber
Jawaban sederhana yang bodoh
Connect dan Express adalah server web untuk nodejs. Tidak seperti Apache dan IIS, keduanya dapat menggunakan modul yang sama, disebut sebagai "middleware".
sumber