Node.js中的process.env.PORT是什么?


175

process.env.PORT || 3000Node.js的用途是什么?我在某处看到了这个:

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

如果用于设置3000为侦听端口,我可以改用它吗?

app.listen(3000);

如果不是,为什么?

Answers:


237

在许多环境(例如Heroku)中,作为一种约定,您可以设置环境变量PORT以告知Web服务器要监听的端口。

因此,process.env.PORT || 3000意味着:环境变量PORT中的任何内容,如果没有,则为3000。

因此,您可以将app.listen,或传递给app.set('port', ...),从而使您的服务器能够从环境中接受要监听的端口上的参数。

如果您将3000硬编码传递给app.listen(),则您总是在监听端口3000,这可能只适合您自己,也可能不适合您,具体取决于您的要求和运行服务器的环境的要求。


74
  • 如果您运行node index.js,Node将使用3000

  • 如果运行PORT=4444 node index.js,则Node 在此示例中将使用process.env.PORT等于4444sudo对于1024以下的端口运行。


13
如果在Windows计算机中使用此端口,则首先必须将PORT变量设置为“ set PORT = 3300”,然后在下一个命令中,如果运行node server.js,它将使用3300而不是3000作为端口。 。
Aakash耆那

35

当将应用程序托管在其他服务(例如Heroku,Nodejitsu和AWS)上时,主机可以process.env.PORT为您独立配置变量;毕竟,您的脚本在其环境中运行。

亚马逊的Elastic Beanstalk可以做到这一点。如果您尝试将静态端口值设置为3000而不是process.env.PORT || 3000静态设置值3000,则您的应用程序将导致500网关错误,因为Amazon为您配置了端口。

这是一个最小的Express应用程序,它将部署在Amazon的Elastic Beanstalk上:

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
在支持ES6的Node.js中,您可以编写更短的代码:const {PORT = 3000} = process.env
朱利安(Julian)

1
@PA。如果在生产环境中找到process.env.port,则没有PA,因此port将获得其价值。请记住,将从左到右读取此操作,并在第一个可用值(如有)处停止。
HoCo_

11

在某些情况下,port只能由环境指定,并保存在用户环境变量中。以下是node.js应用如何使用它。

process对象是全局的,提供有关当前Node.js进程的信息并对其进行控制。全局而言,它始终可用于Node.js应用程序,而无需使用require()

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

例如,

terminal:设置一个新的用户环境变量,不是永久的

export MY_TEST_PORT=9999

app.js:从节点应用程序读取新的环境变量

console.log(process.env.MY_TEST_PORT)

终端:运行节点应用程序并获取值

$ node app.js
9999
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.