มันเป็นเซิร์ฟเวอร์ใช่
เว็บแอปพลิเคชัน node.js เป็นเว็บเซิร์ฟเวอร์เต็มรูปแบบเช่นเดียวกับ Nginx หรือ Apache
คุณสามารถให้บริการแอปพลิเคชัน node.js ของคุณได้โดยไม่ต้องใช้เว็บเซิร์ฟเวอร์อื่น เพียงแค่เปลี่ยนรหัสของคุณเป็น:
app = express();
http.createServer(app).listen(80);
อันที่จริงบางโปรเจ็กต์ใช้ node.js เป็นโหลดบาลานเซอร์ส่วนหน้าสำหรับเซิร์ฟเวอร์อื่น ๆ (รวมถึง Apache)
โปรดทราบว่า node.js ไม่ใช่สแต็กการพัฒนาเพียงอย่างเดียวที่ทำได้ กรอบการพัฒนาเว็บใน Go, Java และ Swift ก็ทำเช่นนี้เช่นกัน
ทำไม?
ในช่วงแรกคือ CGI CGI ดีและทำงานได้ดี Apache จะได้รับคำขอพบว่า url จำเป็นต้องเรียกใช้แอป CGI เรียกใช้แอป CGI นั้นและส่งผ่านข้อมูลเป็นตัวแปรสภาพแวดล้อมอ่าน stdout และให้บริการข้อมูลกลับไปที่เบราว์เซอร์
ปัญหาคือมันช้า เป็นเรื่องปกติเมื่อแอป CGI เป็นโปรแกรม C ที่คอมไพล์แบบคงที่ขนาดเล็ก แต่กลุ่มของโปรแกรม C ที่คอมไพล์แบบคงที่ขนาดเล็กนั้นยากที่จะรักษา ผู้คนจึงเริ่มเขียนด้วยภาษาสคริปต์ จากนั้นก็ยากที่จะรักษาและผู้คนก็เริ่มพัฒนาเฟรมเวิร์ก MVC เชิงวัตถุ ตอนนี้เราเริ่มมีปัญหา - ทุกคำขอจะต้องรวบรวมคลาสเหล่านั้นทั้งหมดและสร้างออบเจ็กต์เหล่านั้นทั้งหมดเพียงเพื่อให้บริการ HTML บางส่วนแม้ว่าจะไม่มีอะไรให้แสดงแบบไดนามิกก็ตาม (เนื่องจากเฟรมเวิร์กจำเป็นต้องพิจารณาว่าไม่มีอะไรที่จะให้บริการแบบไดนามิก)
จะเป็นอย่างไรหากเราไม่จำเป็นต้องสร้างวัตถุเหล่านั้นทุกคำขอ?
นั่นคือสิ่งที่ผู้คนคิด และจากการพยายามแก้ปัญหานั้นก็มีหลายกลยุทธ์ หนึ่งในสิ่งแรกสุดคือการฝังล่ามโดยตรงในเว็บเซิร์ฟเวอร์เช่นmod_php
ใน Apache คลาสและอ็อบเจ็กต์ที่คอมไพล์สามารถเก็บไว้ในตัวแปรส่วนกลางดังนั้นจึงแคช อีกกลยุทธ์หนึ่งคือการรวบรวมข้อมูลล่วงหน้า และอีกกลยุทธ์หนึ่งคือการเรียกใช้แอปพลิเคชันเป็นกระบวนการเซิร์ฟเวอร์ปกติและพูดคุยกับเว็บเซิร์ฟเวอร์โดยใช้โปรโตคอลที่กำหนดเองเช่น FastCGI
จากนั้นนักพัฒนาบางคนก็เริ่มใช้ HTTP เป็นโปรโตคอลเซิร์ฟเวอร์ของแอป -> แอพนี้ยังเป็นเซิร์ฟเวอร์ HTTP ข้อดีของสิ่งนี้คือคุณไม่จำเป็นต้องใช้โปรโตคอลใหม่ที่อาจเป็นไปได้ว่ามีข้อผิดพลาดและอาจไม่ได้ทดสอบและคุณสามารถดีบักแอปของคุณได้โดยตรงโดยใช้เว็บเบราว์เซอร์ (หรือโดยทั่วไปcurl
) และคุณไม่จำเป็นต้องมีเว็บเซิร์ฟเวอร์ที่ได้รับการแก้ไขเพื่อรองรับแอปของคุณมีเพียงเว็บเซิร์ฟเวอร์ใด ๆ ที่สามารถทำ reverse proxying หรือ redirects ได้
ทำไมต้องใช้ Apache / Nginx
เมื่อคุณให้บริการแอป node.js โปรดทราบว่าคุณเป็นผู้สร้างเว็บเซิร์ฟเวอร์ของคุณเอง ข้อบกพร่องที่อาจเกิดขึ้นในแอปของคุณเป็นข้อบกพร่องที่ใช้ประโยชน์ได้โดยตรงบนอินเทอร์เน็ต บางคน (แก้ตัว) ไม่สบายใจกับเรื่องนี้
การเพิ่มเลเยอร์ของ Apache หรือ Nginx ที่ด้านหน้าแอป node.js หมายความว่าคุณมีซอฟต์แวร์ที่ผ่านการทดสอบการต่อสู้และผ่านการทดสอบความปลอดภัยบนอินเทอร์เน็ตที่ใช้งานจริงเป็นอินเทอร์เฟซสำหรับแอปของคุณ มันเพิ่มเวลาแฝงเล็กน้อย (reverse proxying) แต่ส่วนใหญ่คิดว่ามันคุ้มค่า
สิ่งนี้เคยเป็นคำแนะนำมาตรฐานในช่วงแรก ๆ ของ node.js แต่ทุกวันนี้ยังมีเว็บไซต์และบริการบนเว็บที่เปิดเผย node.js โดยตรงกับอินเทอร์เน็ต http.Server
โมดูลคือตอนนี้ค่อนข้างดีการต่อสู้ผ่านการทดสอบบนอินเทอร์เน็ตที่จะเชื่อถือได้
Isn't it true that a Node.js based server (i.e. code) will still be placed within something like Nginx to run?
ไม่ถูกต้อง