หลังจากติดตั้งโหนด (ดาวน์โหลด) สร้างไดเรกทอรีบนเครื่องของคุณและเริ่มแอปพลิเคชันแรกของคุณ
$ mkdir hello-world
ในไดเรกทอรีนี้คุณจะกำหนดแอปพลิเคชัน "แพ็คเกจ" ซึ่งไม่แตกต่างจากแพ็คเกจโหนดอื่น ๆ ไฟล์ JSON ในไดเรกทอรีไฟล์จะกำหนดการพึ่งพาอย่างชัดเจน คุณสามารถใช้คำสั่ง NPM เพื่อรับ Express เวอร์ชันล่าสุดซึ่งคุณต้องการทำแทนที่จะติดตั้งเวอร์ชันนอกเหนือจาก "3.x" เพื่อป้องกันความประหลาดใจที่ไม่รู้จัก
{"ชื่อ": "Hello-World", "คำอธิบาย": "Hello World Test App", "เวอร์ชัน": "0.0.1", "ส่วนตัว": จริง, "การพึ่งพา": {"ด่วน": "3.x"}}ตอนนี้คุณมีแพ็คเกจ ในไดเรกทอรีนี้คุณสามารถใช้ NPM (1) เพื่อติดตั้งการพึ่งพานี้ในกรณีนี้คุณต้องป้อนเท่านั้น:
$ npm ติดตั้ง
เมื่อ NPM เสร็จสิ้นคุณจะมี Express 3.x ที่คุณต้องพึ่งพาในไดเรกทอรี /node_modules คุณสามารถตรวจสอบสิ่งนี้ด้วย NPM LS เช่นเดียวกับ Tree Express และการอ้างอิงของตัวเองที่แสดงในตัวอย่างโค้ดต่อไปนี้
$ npm [email protected] /ส่วนตัว /tmp└─┬ [email protected] ├── [email protected] ├─┬ [email protected] │── [email protected] └── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] ├── [email protected] [email protected] └── [email protected]
ตอนนี้สร้างแอปพลิเคชันเอง! สร้างไฟล์ที่เรียกว่า app.js หรือ server.js ไม่ว่าคุณจะชอบใดแนะนำ Express แล้วใช้ Express () เพื่อสร้างแอปพลิเคชันใหม่:
var express = ต้องการ ('express'); var app = express ();อินสแตนซ์แอปพลิเคชันใหม่สามารถเริ่มกำหนดเส้นทางผ่าน App.verb () ซึ่งในกรณีนี้ตอบสนองต่อคำขอ "Get/" ผ่านสตริง "Hello World" REQ และ RES เป็นวัตถุโหนดเดียวกันที่มีให้กับคุณดังนั้นคุณอาจเรียก res.pipe (), req.on ('ข้อมูล', การโทรกลับ) และสิ่งอื่น ๆ ที่คุณจะทำซึ่งไม่มีส่วนเกี่ยวข้องกับ Express
แสดงการปรับปรุงวัตถุเหล่านี้เพื่อให้คุณมีอินเทอร์เฟซระดับสูงเช่น Res.Send () นอกเหนือจากการเพิ่มความยาวเนื้อหาให้คุณ:
app.get ('/hello.txt', function (req, res) {res.send ('Hello World');});ตอนนี้เรียกใช้เมธอด app.listen () เพื่อให้การเชื่อมต่อเชื่อมและฟังรับพารามิเตอร์เดียวกันกับ net.server ของโหนด #listen ():
var server = app.listen (3000, function () {console.log ('ฟังบนพอร์ต %d', server.address (). พอร์ต);});ใช้ Express (1) เพื่อสร้างแอปพลิเคชัน
ทีมด่วนรักษาตัวสร้างโครงการที่สะดวกสบายชื่อ Express-Generator (1) หากคุณติดตั้งตัวสร้างรายละเอียดทั่วโลกด้วย NPM คุณสามารถเข้าถึงได้จากทุกที่บนคอมพิวเตอร์ของคุณ:
$ npm ติดตั้ง -g express -generator
เครื่องมือนี้เป็นวิธีที่ง่ายในการรับเฟรมเวิร์กแอปพลิเคชัน แต่ด้วยขอบเขตที่ จำกัด เช่นรองรับเอ็นจิ้นเทมเพลตเพียงไม่กี่ตัว คุณสามารถดูได้ผ่านความช่วยเหลือ:
การใช้งาน: Express [ตัวเลือก] ตัวเลือก: -H, -ข้อมูลการใช้งานเอาต์พุต -V, -v, -เวอร์ชันเอาท์พุทหมายเลขเวอร์ชัน -E, -EJS เพิ่มการสนับสนุนเครื่องยนต์ EJS (ค่าเริ่มต้นเป็นหยก) -H, -โฮแกนเพิ่ม Hogan.js Engine -C, -CSS เพิ่มการสนับสนุน StylesHeet
หากคุณต้องการสร้างแอปพลิเคชันที่รองรับในทุกกรณีคุณเพียงแค่ต้องดำเนินการ ::
$ Express -CSS Stylus MyAppCreate: MyAppCreate: MyApp/Package.jsonCreate: MyApp/App.jscreate: MyApp/PublicCreate: MyApp/Public/JavaScripreate: MyApp/Public/Imagecreate: MyApp/Public/Public/Stylesheet MyApp/Route/index.jscreate: MyApp/Views/index.jadecreate: MyApp/Views/layout.jadeinstall การพึ่งพา: $ cd myapp && npm ติดตั้งแอพ: $ debug = myapp node แอป
เช่นเดียวกับแอปพลิเคชันโหนดอื่น ๆ คุณต้องติดตั้งการอ้างอิงต่อไปนี้:
จากนั้นเริ่มต้นกันเถอะ
$ NPM เริ่มต้น
นี่คือทั้งหมดที่คุณต้องการเพื่อให้แอปพลิเคชันง่ายขึ้นและทำงาน โปรดจำไว้ว่า Express ไม่ผูกพันกับโครงสร้างไดเรกทอรีเฉพาะใด ๆ เหล่านี้เป็นเพียงแนวทางสำหรับคุณ การเลือกโครงสร้างแอปพลิเคชันสามารถดูได้ในที่เก็บ GitHub
การจัดการข้อผิดพลาด
การจัดการข้อผิดพลาดคำจำกัดความของมิดเดิลแวร์เป็นเหมือนมิดเดิลแวร์ธรรมดา แต่ต้องกำหนดพารามิเตอร์ 4 ตัวซึ่งเป็นฟังก์ชั่นลายเซ็น (ERR, REQ, RES, ถัดไป):
app.use (ฟังก์ชั่น (err, req, res, ถัดไป) {console.error (err.stack); res.send (500, 'บางสิ่งบางอย่างพัง!');});แม้ว่ามิดเดิลแวร์การจัดการข้อผิดพลาดที่ถูกบังคับมักจะไม่ได้กำหนดไว้ในตอนท้ายหลังจากแอปอื่น ๆ ใช้ () การโทรของมันจะเป็นแบบนี้:
var bodyparser = ต้องการ ('body-parser'); var methodoverride = ต้องการ ('method-override'); app.use (bodyparser ()); app.use (Methodoverride ()); app.use (app.router); app.use (ฟังก์ชันการตอบสนองในมิดเดิลแวร์เหล่านี้เป็นไปโดยพลการอย่างสมบูรณ์ คุณอาจต้องการตอบกลับไปยังหน้าข้อผิดพลาด HTML ข้อความง่าย ๆ สตริง JSON หรือการตอบกลับอื่น ๆ ที่คุณต้องการ
ในการสร้างกรอบการทำงานที่เป็นระเบียบและสูงกว่าคุณสามารถกำหนดมิดเดิลแวร์การจัดการข้อผิดพลาดเหล่านี้ได้หลายอย่างเช่นเดียวกับที่คุณกำหนดมิดเดิลแวร์ปกติ ตัวอย่างเช่นสมมติว่าคุณต้องการกำหนดตัวจัดการข้อผิดพลาดสำหรับคำขอ XHR นอกเหนือจากสิ่งเหล่านี้สิ่งที่คุณอาจทำมีดังนี้:
var bodyparser = ต้องการ ('body-parser'); var methodoverride = ต้องการ ('method-override'); app.use (bodyparser ()); app.use (Methodoverride ()); app.use (app.router); app.use (คนทำนาย); app.use (clienterRorHandler); app.use (errorhandler);ในผู้เล่นที่มีคนจริงมากขึ้นคุณสามารถเขียนคำขอและข้อความแสดงข้อผิดพลาดไปยัง Stderr, Loggly หรือบริการที่คล้ายกัน:
ฟังก์ชั่นผู้สวมใส่ (err, req, res, ถัดไป) {console.error (err.stack); ถัดไป (err);}คำจำกัดความของ clienterRorHandler แสดงไว้ด้านล่างโปรดทราบว่าข้อผิดพลาดนี้จะถูกส่งผ่านไปยังข้อต่อไปอย่างชัดเจน
Function ClientERRORHANDLER (err, req, res, ถัดไป) {ถ้า (req.xhr) {res.send (500, {ข้อผิดพลาด: 'บางสิ่งบางอย่างระเบิดขึ้น!'}); } else {next (err); -การใช้งาน "ทุกรอบ" ข้อผิดพลาดต่อไปนี้สามารถกำหนดเป็น:
function errorhandler (err, req, res, ถัดไป) {res.status (500); res.render ('ข้อผิดพลาด', {ข้อผิดพลาด: err});}ผู้ใช้นับออนไลน์
ส่วนนี้อธิบายรายละเอียดแอปพลิเคชัน (เล็ก) และใช้ REDIS เพื่อติดตามจำนวนผู้ใช้ออนไลน์ ก่อนสร้างแพ็คเกจ ไฟล์ JSON มีไฟล์แนบสองไฟล์หนึ่งไฟล์สำหรับไคลเอนต์ Redis และอื่น ๆ สำหรับ Express เอง ตรวจสอบให้แน่ใจว่าคุณได้ห่อ Redis และวิ่งผ่าน $ Redis-Server
{"ชื่อ": "แอป", "เวอร์ชัน": "0.0.1", "การพึ่งพา": {"ด่วน": "3.x", "redis": "*"}}ถัดไปคุณต้องสร้างแอปพลิเคชันและการเชื่อมต่อกับ Redis:
var express = require ('express'); var redis = ต้องการ ('redis'); var db = redis.createClient (); var app = express ();มิดเดิลแวร์คนต่อไปติดตามผู้ใช้ออนไลน์ ที่นี่เราจะใช้ชุดเรียงลำดับเพื่อให้เราสามารถสอบถามผู้ใช้ออนไลน์โดย Redis ซึ่งใช้เวลาเพียงไม่กี่มิลลิวินาทีเท่านั้น เราใช้การประทับเวลาเป็น "มาตรฐานออนไลน์" สำหรับสมาชิก โปรดทราบว่าที่นี่เราใช้สตริงตัวแทนผู้ใช้แทนรหัสผู้ใช้ปกติ
app.use (ฟังก์ชั่น (req, res, ถัดไป) {var ua = req.headers ['user-agent']; db.zadd ('ออนไลน์', date.now (), ua, ถัดไป);});มิดเดิลแวร์คนต่อไปคือการใช้ ZrevRangeByscore ในนาทีสุดท้ายเพื่อให้ได้จำนวนผู้ใช้ออนไลน์สูงสุดเราจะได้รับผู้ใช้ออนไลน์ล่าสุดเสมอและขีด จำกัด สูงสุดของเขาคือการประทับเวลาปัจจุบันลบ 60000 มิลลิวินาที
app.use (ฟังก์ชั่น (req, res, ถัดไป) {var min = 60 * 1000; var ago = date.now () - min; db.zrevrangebyscore ('ออนไลน์', '+inf', ago, ฟังก์ชั่น (err, users) {ถ้า (err) ส่งคืนถัดไปในที่สุดเราใช้มันผ่าน URL และผูกมันเข้ากับพอร์ต! นั่นคือทั้งหมดที่เข้าถึงแอพนี้ในเบราว์เซอร์ใหม่และคุณจะเห็นการเพิ่มขึ้นของจำนวนผู้คนออนไลน์
app.get ('/', function (req, res) {res.send (req.online.length + 'ผู้ใช้ออนไลน์');}); app.listen (3000);ย้อนกลับพร็อกซีสำหรับ Express
การใช้ Express หลังพร็อกซีย้อนกลับเช่น Varnish หรือ Nginx นั้นเป็นเรื่องเล็กน้อย แต่ต้องใช้การกำหนดค่า ด้วยการเปิดใช้งานแอปการตั้งค่า "Trust Proxy" ที่สามารถใช้งานได้ ("Trust Proxy") Express มีกลอุบายบางอย่างสำหรับการเปลี่ยนรูปแบบย้อนกลับ X-Forwarded-* ฟิลด์ส่วนหัวอาจน่าเชื่อถือไม่เช่นนั้นพวกเขาอาจถูกหลอกได้ง่าย
การเปิดใช้งานการตั้งค่านี้มีเอฟเฟกต์เล็กน้อย อย่างแรกคือ X-Forwarded-Proto อาจถูกตั้งค่าโดย Reverse Proxy โดยบอกแอปว่าเป็น HTTPS หรือเพียง HTTP ที่เรียบง่าย ค่านี้สะท้อนโดย req.protocol
การเปลี่ยนแปลงครั้งที่สองคือค่า REQ.IP และ REQ.IPS จะเติมรายการของที่อยู่ X-Forwarded-for
Debug Express
Express ใช้โมดูลดีบั๊กภายในเพื่อบันทึกข้อมูลเกี่ยวกับการจับคู่เส้นทางและรูปแบบแอปพลิเคชัน หากต้องการดูข้อความนี้เพียงตั้งค่าตัวแปรสภาพแวดล้อมการดีบักเพื่อแสดง:*และหลังจากเริ่มแอปพลิเคชันคุณจะเห็นข้อมูลการดีบักในคอนโซล
$ debug = express:* node ./bin/www
การเรียกใช้ตัวอย่าง Hello World นี้จะพิมพ์ต่อไปนี้:
Express: Application Booting ในโหมดการพัฒนา +0Msexpress: เราเตอร์กำหนด Get /hello.txt +0msexpress: เราเตอร์กำหนด get /hello.txt +1ms
นอกจากนี้โปรแกรมที่สร้างขึ้นโดยการแสดง Executable (Generator) ยังใช้โมดูลดีบั๊กและขอบเขตเริ่มต้นคือเนมสเปซดีบั๊ก
คุณสามารถเปิดใช้งานคำสั่งการดีบักเหล่านี้ด้วยคำสั่งต่อไปนี้
$ debug = my-application node ./bin/www
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการดีบักดูคู่มือการดีบัก