Apa itu process.env.PORT di Node.js?

175

apa yang process.env.PORT || 3000digunakan untuk di Node.js? Saya melihat ini di suatu tempat:

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

Jika digunakan untuk mengatur 3000sebagai port mendengarkan, dapatkah saya menggunakan ini sebagai gantinya?

app.listen(3000);

Jika tidak mengapa?

user-S
sumber

Jawaban:

237

Di banyak lingkungan (mis. Heroku), dan sebagai konvensi, Anda dapat mengatur variabel lingkungan PORTuntuk memberi tahu port web tempat server Anda mendengarkan.

Jadi process.env.PORT || 3000artinya: apa pun yang ada di PORT variabel lingkungan, atau 3000 jika tidak ada di sana.

Jadi, Anda meneruskannya app.listen, atau ke app.set('port', ...), dan itu membuat server Anda dapat menerima parameter dari lingkungan tempat mendengarkan port.

Jika Anda melewati 3000hard-coded app.listen(), Anda selalu mendengarkan pada port 3000, yang mungkin hanya untuk Anda, atau tidak, tergantung pada persyaratan Anda dan persyaratan lingkungan di mana Anda menjalankan server Anda.

Nitzan Terguncang
sumber
74
  • jika Anda menjalankan node index.js, Node akan digunakan3000

  • Jika Anda menjalankan PORT=4444 node index.js, Node akan menggunakan process.env.PORTyang sama dengan 4444dalam contoh ini. Jalankan dengan sudountuk port di bawah 1024.

Abdennour TOUMI
sumber
13
Jika Anda menggunakan ini di mesin windows, pertama-tama Anda harus mengatur variabel PORT sebagai "set PORT = 3300", kemudian pada perintah berikutnya, jika Anda menjalankan node server.js, ia akan mengambil port sebagai 3300 bukannya 3000 .
Aakash Jain
35

Saat meng-hosting aplikasi Anda di layanan lain (seperti Heroku, Nodejitsu, dan AWS), host Anda dapat secara mandiri mengkonfigurasi process.env.PORTvariabel untuk Anda; setelah semua, skrip Anda berjalan di lingkungannya.

Elastic Beanstalk Amazon melakukan ini. Jika Anda mencoba menetapkan nilai port statis seperti 3000bukannya di process.env.PORT || 3000mana 3000 adalah pengaturan statis Anda, maka aplikasi Anda akan menghasilkan kesalahan 500 gateway karena Amazon mengkonfigurasi port untuk Anda.

Ini adalah aplikasi Express minimal yang akan digunakan di 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);
Klik ini
sumber
1
Dalam Node.js yang mendukung ES6 Anda bahkan dapat menulis lebih pendek:const {PORT = 3000} = process.env
Julian
1
@ PA. tidak ada PA, jika process.env.port ditemukan di lingkungan produksi maka port akan mendapatkan nilai dari itu. Ingat bahwa operasi ini akan dibaca dari kiri ke kanan dan berhenti pada nilai pertama yang tersedia jika ada.
HoCo_
11

Dalam beberapa skenario, porthanya dapat ditetapkan oleh lingkungan dan disimpan dalam variabel lingkungan pengguna. Di bawah ini adalah cara kerja aplikasi node.js.

The processobjek adalah global yang menyediakan informasi tentang, dan kontrol atas, proses Node.js saat ini. Sebagai global, selalu tersedia untuk aplikasi Node.js tanpa menggunakan require().

The process.envproperti mengembalikan sebuah objek yang berisi lingkungan pengguna.

Contoh objek ini terlihat seperti:

{
  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'
}

Sebagai contoh,

terminal : atur variabel lingkungan pengguna baru, bukan secara permanen

export MY_TEST_PORT=9999

app.js : baca variabel lingkungan baru dari aplikasi node

console.log(process.env.MY_TEST_PORT)

terminal : jalankan aplikasi simpul dan dapatkan nilainya

$ node app.js
9999
tengah lapangan
sumber