簡體   English   中英

Node.js/Express.js 應用程序僅適用於端口 3000

[英]Node.js/Express.js App Only Works on Port 3000

我有一個 Node.js/Express.js 應用程序在我的服務器上運行,它只能在端口 3000 上運行,我正試圖找出原因。 這是我發現的:

  • 如果不指定端口 ( app.listen() ),應用程序會運行,但不會加載 web 頁面。
  • 在端口 3001 ( app.listen(3001) ) 或任何其他未使用的端口上,應用程序運行但 web 頁面未加載。
  • 在端口 2999 上,應用程序會拋出錯誤,因為其他東西正在使用該端口。
  • 在端口 3000 上,應用程序運行並且 web 頁面加載正常。

我知道 Express 應用程序默認使用端口 3000。但奇怪的是,我的應用程序僅在我明確使其在端口 3000 ( app.listen(3000) ) 上運行時才運行。

我在/usr/bin/express的第 220 行找到了這個:

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

如前所述:將端口設置為指定的端口,如果未指定,則設置為 3000。

如何讓我的應用程序在不同的端口(例如 8080 或 3001)上運行?

謝謝!

編輯:代碼示例(非常簡單的節點/Express 應用程序)

var express = require("express");
var app = express();

app.get('/', function(req, res){
    res.send('hello world'); 
});

// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);

如果您的app.js中有類似內容,則可以使用以下方法:

http.createServer(app).listen(app.get('port'),
  function(){
    console.log("Express server listening on port " + app.get('port'));
});

明確地對代碼進行硬編碼以使用所需的端口,例如:

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

此代碼意味着將您的端口設置為環境變量PORT ,如果undefined則將其設置為文字3000

或者,使用您的環境來設置端口。 通過環境進行設置可以幫助在PRODUCTIONDEVELOPMENT之間進行PRODUCTION ,並且許多平台即服務也可以使用環境根據其規格以及內部Express配置來設置端口。 以下設置環境鍵=值對,然后啟動您的應用程序。

$ PORT=8080 node app.js

參考您的代碼示例,您需要這樣的內容:

var express = require("express");
var app = express();

// sets port 8080 to default or unless otherwise specified in the environment
app.set('port', process.env.PORT || 8080);

app.get('/', function(req, res){
    res.send('hello world');
});

// Only works on 3000 regardless of what I set environment port to or how I set
// [value] in app.set('port', [value]).
// app.listen(3000);
app.listen(app.get('port'));

bin/www ,有一行:

var port = normalizePort(process.env.PORT || '3000');

嘗試對其進行修改。

嘗試這個

$ PORT=8080 node app.js

更改Express框架上偵聽端口的默認方法是修改bin文件夾中名為www的文件。

在那里,您會發現如下一行

var port = normalizePort(process.env.PORT || '3000');

將值3000更改為所需的任何端口。

這對於Express版本4.13.1有效

請參考此鏈接。

嘗試找到bin> www位置,然后嘗試更改端口號...

給Mac OS X和Linux用戶一個提示:

如果要在小於1024的端口號上運行Node / Express應用程序,則必須以超級用戶身份運行: sudo PORT=80 node app.js

在具有express-generator(4.13.1)的最新版本的代碼中,app.js是導出的模塊,並且使用app.set('port',process.env.PORT || 3001)在/ bin / www中啟動服務器。 app.js中的內容將被bin / www中的類似語句覆蓋。 我只是更改了bin / www中的語句。

找到的行僅查找環境變量PORT ,如果已定義則使用它,否則使用默認端口3000 您必須先定義此環境變量(無需是root)

export PORT=8080
node <your-app.js>

如果要顯示某些內容,說明您已連接3000

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

希望對您有幫助

注意,此問題從未解決過……您的計算機前可能有防火牆阻止了這些端口,或者設置了iptables以阻止使用這些端口。

嘗試在運行應用程序時運行nmap -F localhost(如果沒有,請安裝nmap)。 如果您似乎在正確的端口上運行該應用程序,並且無法通過遠程瀏覽器訪問該應用程序,則表明某些中間件或物理防火牆阻止了該端口。

希望這可以幫助!

根據快遞的當前版本回答

如果您談論的是Express當前版本 ,如果您運行app.listen()開始監聽而不指定端口,則Express會為您的應用程序選擇一個隨機端口 ,以了解其當前正在使用哪個端口

app.listen(0, () => {
    console.log(app.address().port)
}

應該輸出您的app端口 此外,第一個參數0可以完全忽略,但不建議使用

在app.js中,只需添加...

process.env.PORT=2999;

這會將PORT變量隔離到快速應用程序中。

確保從應用程序的該文件夾中運行,其中包含package.json。

我正在使用minimist程序包和節點啟動參數來控制端口。

node server.js --port 4000

要么

node server.js -p 4000

在server.js中,端口可以通過以下方式確定

var argv = parseArgs(process.argv.slice(2))

const port = argv.port || argv.p || 3000;
console.log(`Listening on port ${port}...`)

//....listen(port);

如果沒有端口作為參數傳遞,則默認為3000。

然后,您可以在port變量上使用listen。

我認為最好的方法是使用dotenv軟件包並在.env配置文件上設置端口,而無需修改文件夾bin的文件www

只需使用以下命令安裝軟件包:

npm install dotenv

在您的應用程序上要求它:

require('dotenv').config()

在項目的根目錄中創建一個.env文件,並在其中添加端口(例如)以監聽端口5000

PORT=5000

就是這樣。

更多信息在這里

如果您使用的是Nodemon,我想是在nodemonConfig中設置了PORT 3000。 檢查是否是這種情況。

今天我對一本書樣本的測試運行找到了一種在將端口號從8000更改為8002以啟動服務器后運行客戶端的方法: http://localhost:8002 failed http://localhost:8002/index works

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM