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);
如果不是,为什么?
当前回答
在某些场景下,port只能由环境指定,保存在用户环境变量中。下面是node.js应用程序如何使用它。
process对象是一个全局变量,提供了关于当前Node.js进程的信息和控制。作为一个全局变量,它总是对Node.js应用程序可用,无需使用require()。
这个过程。属性返回一个包含用户环境的对象。
该对象的示例如下:
{
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:从节点app中读取新的环境变量
console.log(process.env.MY_TEST_PORT)
终端:运行节点app获取值
$ node app.js
9999
其他回答
如果你运行node index.js, node将使用3000 如果你运行PORT=4444节点索引.js, node将使用process.env.PORT,在本例中它等于4444。对于1024以下的端口,使用sudo运行。
在许多环境中(例如Heroku),作为一种惯例,你可以设置环境变量PORT来告诉你的web服务器监听哪个端口。
process.env.PORT || 3000的意思是:环境变量PORT中的任何东西,如果没有,则是3000。
所以你把它传递给app.listen,或者app.set('port',…),这使得你的服务器能够接受来自环境的“监听哪个端口”参数。
如果将3000硬编码传递给app.listen(),则始终在监听端口3000,这可能只适合您,也可能不适合,这取决于您的需求和运行服务器的环境的需求。
process.env.PORT || 3000表示:process.env.PORT表示手动设置的端口号。默认端口为3000。如果你没有手动设置它,那么它将监听3000。
app.set('port', process.env.PORT || 3000)或app.listen(3000)在你的代码中的意思是一样的。它只说什么端口应该监听作为参数从环境。
3000是传递给app.listen()的硬编码参数,这意味着当你运行后端代码时,你总是会在端口3000上监听,这可能适合你,也可能不适合,这取决于你的需求和服务器运行环境的需求。
Dotenvis是一个零依赖模块,它将环境变量从.env文件加载到process.env中。在与代码分开的环境中存储配置是基于十二因素应用程序方法的。
与npm
NPM安装dotenv
或用纱线
纱线加dotenv
使用
在应用程序中尽可能早地要求并配置dotenv。
要求(' dotenv ') . config ()
首先在文件资源管理器中创建一个.env文件,并在其中写入:
端口:8080
const http = require("http");
require("dotenv").config();
let port = process.env.PORT;
let host = process.env.HOST;
let server = http.createServer((req, res) => {
console.log("Thanks for the request");
res.writeHead(200, { "Content-Type": "text/plain" });
res.end("You Rock");
});
server.listen(port, host, () => {
console.log(`Server is listening ${host}:${port}`);
});
当你的应用程序托管在另一个服务(如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);