สิ่งที่process.env.PORT || 3000
ใช้สำหรับใน Node.js? ฉันเห็นสิ่งนี้ที่ไหนสักแห่ง:
app.set('port', process.env.PORT || 3000);
หากใช้เพื่อตั้งค่า3000
เป็นพอร์ตการรับฟังฉันสามารถใช้สิ่งนี้แทนได้หรือไม่?
app.listen(3000);
ถ้าไม่ใช่เพราะอะไร
สิ่งที่process.env.PORT || 3000
ใช้สำหรับใน Node.js? ฉันเห็นสิ่งนี้ที่ไหนสักแห่ง:
app.set('port', process.env.PORT || 3000);
หากใช้เพื่อตั้งค่า3000
เป็นพอร์ตการรับฟังฉันสามารถใช้สิ่งนี้แทนได้หรือไม่?
app.listen(3000);
ถ้าไม่ใช่เพราะอะไร
คำตอบ:
ในหลาย ๆ สภาพแวดล้อม (เช่น Heroku) และตามแบบแผนคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมPORT
เพื่อบอกเว็บเซิร์ฟเวอร์ของคุณว่าพอร์ตใดที่จะรับฟัง
ดังนั้นprocess.env.PORT || 3000
หมายความว่า: อะไรก็ตามที่อยู่ในตัวแปรสภาพแวดล้อม PORT หรือ 3000 ถ้าไม่มีอะไรในนั้น
ดังนั้นคุณจะผ่านสิ่งapp.listen
นั้นหรือไปยังapp.set('port', ...)
และนั่นทำให้เซิร์ฟเวอร์ของคุณสามารถยอมรับพารามิเตอร์จากสภาพแวดล้อมที่พอร์ตที่จะรับฟัง
หากคุณผ่าน3000
การกำหนดค่าตายตัวapp.listen()
คุณจะฟังพอร์ต 3000 เสมอซึ่งอาจเหมาะสำหรับคุณหรือไม่ขึ้นอยู่กับข้อกำหนดและข้อกำหนดของสภาพแวดล้อมที่คุณใช้งานเซิร์ฟเวอร์
ถ้าคุณเรียกใช้node index.js
โหนดจะใช้3000
หากคุณเรียกใช้PORT=4444 node index.js
โหนดจะใช้process.env.PORT
ซึ่งเท่ากับ4444
ในตัวอย่างนี้ ทำงานด้วยsudo
พอร์ตต่ำกว่า 1024
เมื่อโฮสต์แอปพลิเคชันของคุณในบริการอื่น (เช่น 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);
const {PORT = 3000} = process.env
ในบางสถานการณ์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