process.env.PORT ใน Node.js คืออะไร


175

สิ่งที่process.env.PORT || 3000ใช้สำหรับใน Node.js? ฉันเห็นสิ่งนี้ที่ไหนสักแห่ง:

 app.set('port', process.env.PORT || 3000);

หากใช้เพื่อตั้งค่า3000เป็นพอร์ตการรับฟังฉันสามารถใช้สิ่งนี้แทนได้หรือไม่?

app.listen(3000);

ถ้าไม่ใช่เพราะอะไร

คำตอบ:


237

ในหลาย ๆ สภาพแวดล้อม (เช่น Heroku) และตามแบบแผนคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมPORTเพื่อบอกเว็บเซิร์ฟเวอร์ของคุณว่าพอร์ตใดที่จะรับฟัง

ดังนั้นprocess.env.PORT || 3000หมายความว่า: อะไรก็ตามที่อยู่ในตัวแปรสภาพแวดล้อม PORT หรือ 3000 ถ้าไม่มีอะไรในนั้น

ดังนั้นคุณจะผ่านสิ่งapp.listenนั้นหรือไปยังapp.set('port', ...)และนั่นทำให้เซิร์ฟเวอร์ของคุณสามารถยอมรับพารามิเตอร์จากสภาพแวดล้อมที่พอร์ตที่จะรับฟัง

หากคุณผ่าน3000การกำหนดค่าตายตัวapp.listen()คุณจะฟังพอร์ต 3000 เสมอซึ่งอาจเหมาะสำหรับคุณหรือไม่ขึ้นอยู่กับข้อกำหนดและข้อกำหนดของสภาพแวดล้อมที่คุณใช้งานเซิร์ฟเวอร์


74
  • ถ้าคุณเรียกใช้node index.jsโหนดจะใช้3000

  • หากคุณเรียกใช้PORT=4444 node index.jsโหนดจะใช้process.env.PORTซึ่งเท่ากับ4444ในตัวอย่างนี้ ทำงานด้วยsudoพอร์ตต่ำกว่า 1024


13
หากคุณใช้สิ่งนี้ในเครื่อง windows อันดับแรกคุณจะต้องตั้งค่าตัวแปร PORT เป็น "set PORT = 3300" จากนั้นในคำสั่งถัดไปหากคุณเรียกใช้ node server.js มันจะใช้พอร์ตเป็น 3300 แทน 3000 .
Aakash Jain

35

เมื่อโฮสต์แอปพลิเคชันของคุณในบริการอื่น (เช่น Heroku, Nodejitsu และ AWS) โฮสต์ของคุณอาจกำหนดค่าprocess.env.PORTตัวแปรให้คุณอย่างอิสระ หลังจากทั้งหมดสคริปต์ของคุณทำงานในสภาพแวดล้อมของพวกเขา

Elastic Beanstalk ของ Amazon ทำสิ่งนี้ หากคุณพยายามตั้งค่าพอร์ตแบบคงที่เช่น3000แทนที่จะเป็นprocess.env.PORT || 3000ตำแหน่งที่ 3000 เป็นการตั้งค่าแบบคงที่แอปพลิเคชันของคุณจะส่งผลให้เกิดข้อผิดพลาด 500 เกตเวย์เนื่องจาก Amazon กำลังกำหนดค่าพอร์ตให้คุณ

นี่เป็นแอปพลิเคชั่น Express ขั้นต่ำที่จะปรับใช้กับ Elastic Beanstalk ของ Amazon:

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

// use port 3000 unless there exists a preconfigured port
var port = process.env.port || 3000;

app.listen(port);

1
ภายใน Node.js ที่สนับสนุน ES6 คุณสามารถเขียนให้สั้นลงได้:const {PORT = 3000} = process.env
Julian

1
@PA ไม่มี PA หากกระบวนการ process.env.port ถูกพบใน environnement การผลิตดังนั้นพอร์ตจะได้รับค่าของมัน โปรดจำไว้ว่าการดำเนินการนี้จะอ่านจากซ้ายไปขวาและหยุดที่ค่าแรกที่มีถ้ามี
HoCo_

11

ในบางสถานการณ์portสามารถกำหนดได้โดยสภาพแวดล้อมและบันทึกไว้ในตัวแปรสภาพแวดล้อมของผู้ใช้ ด้านล่างนี้เป็นวิธีที่แอปของ node.js ทำงานร่วมกับมัน

processวัตถุเป็นโลกที่ให้ข้อมูลเกี่ยวกับและควบคุมกระบวนการ Node.js ปัจจุบัน require()ในฐานะที่เป็นระดับโลกก็มักจะใช้ได้กับการใช้งานโดยไม่ต้องใช้ Node.js

process.envคุณสมบัติส่งกลับวัตถุที่มีสภาพแวดล้อมที่ผู้ใช้

ตัวอย่างของวัตถุนี้ดูเหมือนว่า:

{
  TERM: 'xterm-256color',
  SHELL: '/usr/local/bin/bash',
  USER: 'maciej',
  PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
  PWD: '/Users/maciej',
  EDITOR: 'vim',
  SHLVL: '1',
  HOME: '/Users/maciej',
  LOGNAME: 'maciej',
  _: '/usr/local/bin/node'
}

ตัวอย่างเช่น,

เทอร์มินัล : ตั้งค่าตัวแปรสภาพแวดล้อมผู้ใช้ใหม่ไม่ใช่อย่างถาวร

export MY_TEST_PORT=9999

app.js : อ่านตัวแปรสภาพแวดล้อมใหม่จากแอปโหนด

console.log(process.env.MY_TEST_PORT)

เทอร์มินัล : รันแอปโหนดและรับค่า

$ node app.js
9999
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.