แม้จะรู้จาวาสคริปต์ค่อนข้างดี แต่ฉันก็สับสนว่าโครงการทั้งสามนี้ในระบบนิเวศของ Node.js ทำอะไรได้บ้าง มันเหมือนกับแร็คของรางไหม? ใครช่วยอธิบายหน่อยได้ไหม?
แม้จะรู้จาวาสคริปต์ค่อนข้างดี แต่ฉันก็สับสนว่าโครงการทั้งสามนี้ในระบบนิเวศของ Node.js ทำอะไรได้บ้าง มันเหมือนกับแร็คของรางไหม? ใครช่วยอธิบายหน่อยได้ไหม?
คำตอบ:
[ อัปเดต:ตั้งแต่เปิดตัว 4.0 Express ไม่ใช้การเชื่อมต่ออีกต่อไป อย่างไรก็ตาม Express ยังคงเข้ากันได้กับมิดเดิลแวร์ที่เขียนขึ้นสำหรับการเชื่อมต่อ คำตอบเดิมของฉันอยู่ด้านล่าง]
ฉันดีใจที่คุณถามเกี่ยวกับเรื่องนี้เพราะมันเป็นเรื่องธรรมดาสำหรับคนที่ดู Node.js นี่คือภาพที่ดีที่สุดของฉันที่อธิบาย:
Node.js เสนอโมดูลhttpซึ่งcreateServer
เมธอดจะส่งคืนออบเจ็กต์ที่คุณสามารถใช้เพื่อตอบสนองต่อคำขอ HTTP วัตถุนั้นสืบทอดhttp.Server
ต้นแบบ
การเชื่อมต่อยังมีcreateServer
วิธีการซึ่งส่งคืนวัตถุที่สืบทอดรุ่นhttp.Server
เพิ่มเติม ส่วนขยายเชื่อมต่อของส่วนใหญ่จะมีที่จะทำให้มันง่ายต่อการเสียบในตัวกลาง นั่นคือเหตุผลที่ Connect อธิบายตัวเองว่าเป็น "มิดเดิลแวร์เฟรมเวิร์ก" และมักจะถูกปรับให้เข้ากับ Ruby Rack
Expressทำเพื่อเชื่อมต่อสิ่งที่ Connect ทำกับโมดูล http: มันมีcreateServer
วิธีการที่ขยายServer
ต้นแบบของการเชื่อมต่อ ดังนั้นฟังก์ชั่นทั้งหมดของ Connect จึงมีอยู่รวมถึงการแสดงผลมุมมองและ DSL ที่ใช้งานง่ายสำหรับการอธิบายเส้นทาง รูดี้ของซินาตร้าเปรียบเทียบได้ดี
จากนั้นก็มีกรอบงานอื่น ๆ ที่ดำเนินการต่อไปและขยาย Express! ตัวอย่างเช่นZappaซึ่งรวมการสนับสนุน CoffeeScript, jQuery ฝั่งเซิร์ฟเวอร์และการทดสอบ
นี่คือตัวอย่างที่เป็นรูปธรรมของสิ่งที่มีความหมายโดย "มิดเดิลแวร์": นอกกรอบไม่มีสิ่งใดที่ให้บริการไฟล์คงที่สำหรับคุณ แต่เพียงแค่ใส่connect.static
(มิดเดิลแวร์ที่มาพร้อมกับการเชื่อมต่อ) กำหนดค่าให้ชี้ไปที่ไดเรกทอรีและเซิร์ฟเวอร์ของคุณจะให้การเข้าถึงไฟล์ในไดเรกทอรีนั้น โปรดทราบว่า Express ยังให้บริการมิดเดิลแวร์ของ Connect เช่นกัน เป็นเช่นเดียวกับexpress.static
connect.static
(ทั้งคู่รู้จักกันstaticProvider
จนกระทั่งเมื่อไม่นานมานี้)
ความประทับใจของฉันคือแอพ "ของจริง" Node.js ส่วนใหญ่ได้รับการพัฒนาด้วย Express ในทุกวันนี้ คุณสมบัติที่เพิ่มเข้ามามีประโยชน์อย่างยิ่งและฟังก์ชั่นระดับล่างทั้งหมดยังคงมีอยู่หากคุณต้องการ
คำตอบที่ยอมรับนั้นเก่ามาก (และตอนนี้ผิด) นี่คือข้อมูล (พร้อมแหล่งที่มา) โดยอ้างอิงตามเวอร์ชันปัจจุบันของ Connect (3.0) / Express (4.0)
http / https createServer
ซึ่งใช้การเรียกกลับ (req, res) เช่น
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
Middlewareนั้นเป็นซอฟต์แวร์ที่อยู่ระหว่างรหัสแอปพลิเคชันของคุณกับ API ระดับต่ำ การเชื่อมต่อขยายการทำงานของเซิร์ฟเวอร์ HTTP ในตัวและเพิ่มปลั๊กอินเฟรมเวิร์ก ปลั๊กอินทำหน้าที่เป็นมิดเดิลแวร์และด้วยเหตุนี้การเชื่อมต่อจึงเป็นโครงงานมิดเดิลแวร์
วิธีที่ทำได้นั้นค่อนข้างง่าย ( และอันที่จริงแล้วรหัสนั้นสั้นจริงๆ! ) ทันทีที่คุณโทรหาvar connect = require('connect'); var app = connect();
คุณจะได้รับฟังก์ชั่นapp
ที่สามารถ:
.use
( แหล่งที่มา ) เพื่อจัดการปลั๊กอิน ( ที่มาจากที่นี่เพราะบรรทัดของรหัสที่เรียบง่ายนี้ )เนื่องจาก 1. ) คุณสามารถทำสิ่งต่อไปนี้:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
ใช้ร่วมกับ 2. ) แล้วคุณจะได้รับ:
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 ให้ฟังก์ชั่นโปรแกรมที่จะลงทะเบียนตัวเองด้วยเพื่อให้คุณไม่จำเป็นที่จะทำให้การเรียกร้องให้http
http.createServer(app)
ที่เรียกว่าlisten
และรหัสที่เพียงแค่สร้าง http http.listen
เซิร์ฟเวอร์ใหม่ลงทะเบียนของการเชื่อมต่อเป็นโทรกลับและส่งต่อข้อโต้แย้งที่จะ จากแหล่งที่มา
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
ดังนั้นคุณสามารถทำได้:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
มันยังเป็นของเก่าที่ดีของคุณhttp.createServer
ด้วยกรอบปลั๊กอินด้านบน
ExpressJS และการเชื่อมต่อเป็นโครงการแบบขนาน การเชื่อมต่อเป็นเพียงมิดเดิลแวร์เฟรมเวิร์กพร้อมuse
ฟังก์ชันที่ดี Express ไม่ได้ขึ้นอยู่กับการเชื่อมต่อ ( ดู package.json ) อย่างไรก็ตามมันทำทุกอย่างที่เชื่อมต่อไม่เช่น:
createServer
like connect เพราะมันเป็นเพียงฟังก์ชั่นที่สามารถใช้req
/ res
คู่ ( แหล่งที่มา )listen
ฟังก์ชั่นยูทิลิตี้ในการลงทะเบียนตัวเองด้วย httpนอกเหนือจากสิ่งที่ให้การเชื่อมต่อ (ซึ่งแสดงซ้ำ) มันมีคุณสมบัติมากมาย เช่น
use
การทำงานของ ExpressJS และการเชื่อมต่อเข้ากันได้และดังนั้นจึงตัวกลางที่ใช้ร่วมกัน ทั้งสองมีความกรอบมิดเดิลแวร์ด่วนเพียงมีมากกว่ากรอบมิดเดิลแวร์ที่เรียบง่าย
ความคิดเห็นของฉัน: คุณได้รับแจ้งมากพอจาก ^ บน ^ เพื่อให้คุณเลือกเอง
http.createServer
หากคุณกำลังสร้างสิ่งที่ต้องการเชื่อมต่อ / expressjs ตั้งแต่เริ่มต้นhttp.createServer
คนส่วนใหญ่ควรใช้ ExpressJS
สิ่งเหล่านี้อาจเป็นจริงในบางเวลา แต่ผิดตอนนี้:
ที่สืบทอด http.Server เวอร์ชันขยาย
ไม่ถูกต้อง. ไม่ขยายและตามที่คุณเห็น ... ใช้มัน
Express ทำเพื่อเชื่อมต่อสิ่งที่ Connect ทำกับโมดูล http
Express 4.0 ไม่ได้ขึ้นอยู่กับการเชื่อมต่อ ดูที่ส่วน package.json ปัจจุบันการพึ่งพา
Node.js เป็นมอเตอร์ javascript สำหรับฝั่งเซิร์ฟเวอร์
นอกเหนือจากความสามารถของ js ทั้งหมดแล้วยังรวมถึงความสามารถด้านเครือข่าย (เช่น HTTP) และการเข้าถึงระบบไฟล์
สิ่งนี้แตกต่างจาก js ฝั่งไคลเอ็นต์ซึ่งงานเครือข่ายถูกผูกขาดโดยเบราว์เซอร์และห้ามการเข้าถึงระบบไฟล์ด้วยเหตุผลด้านความปลอดภัย
สิ่งที่ทำงานในเซิร์ฟเวอร์เข้าใจ HTTP และสามารถเข้าถึงไฟล์เสียงเหมือนเว็บเซิร์ฟเวอร์ แต่ไม่ใช่หนึ่งเดียว
ในการทำให้ node.js ทำงานเหมือนเว็บเซิร์ฟเวอร์ต้องทำการตั้งโปรแกรม: จัดการคำร้องขอ HTTP ขาเข้าและจัดเตรียมการตอบสนองที่เหมาะสม
นี่คือสิ่งที่ Express ทำ: เป็นการติดตั้งเว็บเซิร์ฟเวอร์ใน js
ดังนั้นการติดตั้งเว็บไซต์จึงเหมือนกับการกำหนดค่าเส้นทางด่วนและการเขียนโปรแกรมคุณสมบัติเฉพาะของเว็บไซต์
การแสดงหน้าเกี่ยวข้องกับจำนวนงาน งานเหล่านั้นจำนวนมากเป็นที่รู้จักกันดีและเป็นเรื่องปกติมากดังนั้นโมดูลเชื่อมต่อของโหนด(หนึ่งในหลาย ๆ โมดูลที่มีให้ทำงานภายใต้โหนด) ใช้งานเหล่านั้น
ดูข้อเสนอที่น่าประทับใจในปัจจุบัน:
Connect เป็นเฟรมเวิร์กและคุณสามารถเลือกโมดูล (ย่อย) ที่คุณต้องการ Contrib Middlewareหน้าระบุรายการยาวของเพิ่มเติมmiddlewares
Express นั้นมาพร้อมกับมิดเดิลแวร์ของการเชื่อมต่อที่ใช้กันทั่วไป
ติดตั้ง node.js
โหนดมาพร้อมกับNPMที่แพคเกจผู้จัดการโหนด
คำสั่งnpm install -g express
จะดาวน์โหลดและติดตั้ง express ทั่วโลก (ตรวจสอบคู่มือแนะนำด่วน )
การรันexpress foo
ในบรรทัดคำสั่ง (ไม่ใช่ในโหนด) จะสร้างแอปพลิเคชันที่พร้อมใช้งานชื่อ foo เปลี่ยนเป็นไดเร็กทอรี (สร้างขึ้นใหม่) และรันด้วยโหนดพร้อมกับคำสั่งnode <appname>
จากนั้นเปิดhttp://localhost:3000
และดู ตอนนี้คุณอยู่ที่
Connect เสนอ API "ระดับที่สูงกว่า" สำหรับการทำงานของเซิร์ฟเวอร์ HTTP ทั่วไปเช่นการจัดการเซสชันการตรวจสอบสิทธิ์การบันทึกและอื่น ๆ Express สร้างขึ้นจากส่วนบนของ Connect ด้วยฟังก์ชันขั้นสูง (เช่น Sinatra)
Node.js
ตัวเองมีโมดูล HTTP ซึ่งเมธอดcreateServerจะส่งคืนวัตถุที่คุณสามารถใช้เพื่อตอบสนองต่อคำขอ HTTP วัตถุนั้นสืบทอดhttp.Server
ต้นแบบ
ข้อมูลที่เกี่ยวข้องโดยเฉพาะถ้าคุณใช้ NTVS สำหรับการทำงานกับ Visual Studio IDE NTVS เพิ่มเครื่องมือทั้ง NodeJS และ Express scaffolding แม่แบบโครงการใน Visual Studio 2012, 2013
นอกจากนี้คำฟุ่มเฟือยที่เรียก ExpressJS หรือเชื่อมต่อเป็น "WebServer" ไม่ถูกต้อง คุณสามารถสร้าง WebServer พื้นฐานโดยมีหรือไม่มีก็ได้ โปรแกรม NodeJS พื้นฐานยังสามารถใช้โมดูล http เพื่อจัดการคำร้องขอ http ดังนั้นจึงกลายเป็นเว็บเซิร์ฟเวอร์พื้นฐาน
มิดเดิลแวร์ตามชื่อที่แนะนำจริงมิดเดิลแวร์อยู่ตรงกลาง .. ตรงกลางของอะไร ตรงกลางของการร้องขอและการตอบสนอง .. วิธีการร้องขอการตอบสนองเซิร์ฟเวอร์ด่วนนั่งอยู่ในแอปด่วน ในภาพนี้คุณสามารถเห็นการร้องขอมาจากไคลเอนต์จากนั้นเซิร์ฟเวอร์เซิร์ฟเวอร์ด่วนให้บริการการร้องขอเหล่านั้น .. งานทั้งหมดของ express server ทั้งในงานแยกตัวเล็ก ๆ เช่นนี้ มิดเดิลแวร์อยู่ระหว่างการร้องขอและการตอบสนองชิ้นส่วนเล็ก ๆ ของเซิร์ฟเวอร์ที่ทำงานบางอย่างและส่งผ่านการร้องขอไปยังส่วนถัดไป .. ในที่สุดการตอบสนองการทำงานทั้งหมดได้ทำ .. เครื่องกลางทั้งหมดสามารถเข้าถึงวัตถุคำขอ วงจรการตอบสนอง ..
นี่เป็นตัวอย่างที่ดีสำหรับการอธิบายมิดเดิลแวร์ในวิดีโอ youtubeด่วนสำหรับมิดเดิลแวร์
Connect และ Express เป็นเว็บเซิร์ฟเวอร์สำหรับ nodejs แตกต่างจาก Apache และ IIS พวกเขาสามารถใช้โมดูลเดียวกันเรียกว่า "มิดเดิลแวร์"