Process.env.PORT trong Node.js là gì?


175

những gì được process.env.PORT || 3000sử dụng cho Node.js? Tôi đã thấy điều này ở đâu đó:

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

Nếu nó được sử dụng để đặt 3000làm cổng nghe, tôi có thể sử dụng cổng này không?

app.listen(3000);

Nếu không tại sao?

Câu trả lời:


237

Trong nhiều môi trường (ví dụ Heroku) và theo quy ước, bạn có thể đặt biến môi trường PORTđể báo cho máy chủ web biết cổng nào để nghe.

Vì thế process.env.PORT || 3000 có nghĩa là: bất cứ điều gì trong môi trường biến PORT, hoặc 3000 nếu không có gì ở đó.

Vì vậy, bạn vượt qua điều đó app.listen, hoặc đến app.set('port', ...), và điều đó làm cho máy chủ của bạn có thể chấp nhận một tham số từ môi trường để nghe cổng nào.

Nếu bạn chuyển 3000mã hóa cứng app.listen(), bạn luôn lắng nghe cổng 3000, có thể chỉ dành cho bạn hoặc không, tùy thuộc vào yêu cầu của bạn và yêu cầu của môi trường nơi bạn đang chạy máy chủ.


74
  • nếu bạn chạy node index.js, Node sẽ sử dụng3000

  • Nếu bạn chạy PORT=4444 node index.js, Node sẽ sử dụng giá trị process.env.PORTnào tương đương với 4444trong ví dụ này. Chạy với sudocác cổng dưới 1024.


13
Nếu bạn đang sử dụng điều này trong máy windows, trước tiên bạn sẽ phải đặt biến PORT là "set PORT = 3300", sau đó trong lệnh tiếp theo, nếu bạn chạy nút server.js, nó sẽ lấy cổng là 3300 thay vì 3000 .
Aakash Jain

35

Khi lưu trữ ứng dụng của bạn trên một dịch vụ khác (như Heroku, Nodejitsu và AWS), máy chủ của bạn có thể định cấu hình độc lập process.env.PORT biến cho bạn; Rốt cuộc, kịch bản của bạn chạy trong môi trường của họ.

Cây đậu đàn hồi của Amazon làm điều này. Nếu bạn cố gắng đặt giá trị cổng tĩnh như 3000thay vì process.env.PORT || 30003000 là cài đặt tĩnh, thì ứng dụng của bạn sẽ dẫn đến lỗi 500 cổng vì Amazon đang định cấu hình cổng cho bạn.

Đây là một ứng dụng Express tối thiểu sẽ triển khai trên Bean Beanalk của 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
Trong Node.js hỗ trợ ES6, bạn có thể viết thậm chí ngắn hơn:const {PORT = 3000} = process.env
Julian

1
@PA. không có PA, nếu process.env.port được tìm thấy trên môi trường sản xuất để cổng sẽ nhận được giá trị của nó. Hãy nhớ rằng thao tác này sẽ được đọc từ trái sang phải và dừng ở giá trị khả dụng đầu tiên nếu có.
HoCo_

11

Trong một số trường hợp, portchỉ có thể được chỉ định bởi môi trường và được lưu trong biến môi trường người dùng. Dưới đây là cách các ứng dụng node.js hoạt động với nó.

Các process tượng là một toàn cầu cung cấp thông tin về và kiểm soát quá trình Node.js hiện tại. Là một toàn cầu, nó luôn có sẵn cho các ứng dụng Node.js mà không cần sử dụng require().

Các process.env tài sản trả về một đối tượng chứa môi trường người dùng.

Một ví dụ về đối tượng này trông giống như:

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

Ví dụ,

terminal : đặt biến môi trường người dùng mới, không vĩnh viễn

export MY_TEST_PORT=9999

app.js : đọc biến môi trường mới từ ứng dụng nút

console.log(process.env.MY_TEST_PORT)

terminal : chạy ứng dụng nút và nhận giá trị

$ node app.js
9999
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.