ฉันมีแอป Node.js / Express.js ที่ทำงานบนเซิร์ฟเวอร์ของฉันซึ่งใช้งานได้กับพอร์ต 3000 เท่านั้นและฉันกำลังพยายามหาสาเหตุ นี่คือสิ่งที่ฉันพบ:
- โดยไม่ระบุพอร์ต (
app.listen()
) แอปจะทำงาน แต่หน้าเว็บไม่โหลด - บนพอร์ต 3001 (
app.listen(3001)
) หรือพอร์ตอื่น ๆ ที่ไม่ได้ใช้งานแอปจะทำงาน แต่หน้าเว็บไม่โหลด - ในพอร์ต 2999 แอปแสดงข้อผิดพลาดเนื่องจากมีบางอย่างกำลังใช้พอร์ตนั้น
- บนพอร์ต 3000 แอปจะทำงานและโหลดหน้าเว็บได้ดี
ฉันรู้ว่าแอป Express มีค่าเริ่มต้นเป็นพอร์ต 3000 แต่น่าแปลกที่แอปของฉันจะทำงานก็ต่อเมื่อฉันทำให้มันทำงานบนพอร์ต 3000 ( app.listen(3000)
) อย่างชัดเจน
ฉันพบสิ่งนี้ในบรรทัด 220 ของ/usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
สิ่งที่ทำตามที่ระบุไว้ก่อนหน้านี้: การตั้งค่าพอร์ตเป็นสิ่งที่ระบุไว้หรือเป็น 3000 หากไม่มีการระบุ
ฉันจะทำให้แอปทำงานบนพอร์ตอื่นเช่น 8080 หรือ 3001 ได้อย่างไร
ขอบคุณ!
แก้ไข: ตัวอย่างโค้ด (แอป Node / Express ที่เรียบง่ายมาก)
var express = require("express");
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);
port
จำเป็นต้องมีA.listen()
ดังนั้นคุณไม่ควรลองทำโดยไม่มี 2) คุณได้รับข้อผิดพลาดเมื่อเรียกใช้แอปพลิเคชันหรือไม่? หรือดูเหมือนว่าไม่สามารถเข้าถึงได้จากเบราว์เซอร์? 3) คุณพยายามที่จะเข้าถึงเว็บไซต์ในเครื่องเดียวกันกับlocalhost:3000
,localhost:3001
ฯลฯ ? หากคุณกำลังใช้สองเครื่องไคลเอนต์หนึ่งเครื่องและเซิร์ฟเวอร์หนึ่งเครื่องคุณจะต้องเพิ่มข้อยกเว้นให้กับไฟร์วอลล์บนเซิร์ฟเวอร์เพื่อให้ Node รับคำขอจากไคลเอนต์