Node.js / Express.js 앱은 포트 3000에서만 작동합니다.
내 서버에서 포트 3000 작동하는 Node.js / Express.js 앱이 실행되는 중이며 그 이유를 알아 내고합니다. 내가 내용 내용은 다음과 가변적입니다.
- 포트 (
app.listen()
)를 지정하지 않는 언어 앱이 실행되는 웹 페이지가로드되지 않습니다. - 포트 3001 (
app.listen(3001)
) 또는 사용하지 않는 다른 포트에서 앱은 사용하지 않는 웹 페이지는로드되지 않습니다. - 포트 2999에서 다른 항목이 해당 포트를 사용하고 있기 때문에 앱에서 오류가 발생합니다.
- 포트 3000에서 앱이 실행되고 웹 페이지가 곧로드됩니다.
Express 앱은 기본적으로 포트 3000이라는 것을 알고 있습니다.하지만 이상하게도 내 앱은 명시 적으로 포트 3000 ( app.listen(3000)
) 에서 실행될 때만 실행 됩니다.
다음의 220 행에서 이것을 찾았습니다 /usr/bin/express
.
app.set(\'port\', process.env.PORT || 3000);
이전에 수행하는 작업 : 지정된 포트를 지정하거나 지정하지 않은 경우 3000으로 설정합니다.
내 앱이 8080 또는 3001과 같은 다른 포트에서 작동해야합니까?
감사합니다!
편집 : 코드 샘플 (매우 간단한 노드 / 익스프레스 앱)
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
.
또는 환경을 사용하여 포트를 설정하십시오. 을 통해 설정 Environmental &하는 사이 도움말 묘사하는 데 사용됩니다 PRODUCTION
및 DEVELOPMENT
자신의 스펙과 내부 익스프레스 CONFIGS에 따라 포트를 설정하고 또한 서비스 로 플랫폼의 많은 환경을 사용합니다 . 다음은 환경 키 = 값 쌍을 설정 한 다음 앱을 시작합니다.
$ 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
. 이 환경 변수를 먼저 정의해야합니다 (루트 일 필요 없음).
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)
}
SHOULD의 출력 포트 당신의 app
. 또한 첫 번째 매개 변수 0
는 완전히 무시할 수 있지만 권장하지 않습니다.
app.js에서 추가하기 만하면됩니다.
process.env.PORT=2999;
이렇게하면 PORT 변수가 Express 응용 프로그램에 격리됩니다.
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
변수에서 수신 대기를 사용할 수 있습니다 .
가장 좋은 방법은 dotenv 패키지 를 사용 하고 폴더 안의 .env
파일을 수정하지 않고 구성 파일 에 포트를 설정하는 것 입니다.www
bin
다음 명령으로 패키지를 설치하십시오.
npm install dotenv
응용 프로그램에 필요 :
require('dotenv').config()
프로젝트의 루트 디렉터리에 .env 파일을 만들고 그 안에 포트를 추가 (예 : 포트 5000에서 수신)합니다.
PORT=5000
그리고 그게 다야.
여기에 더 많은 정보
Nodemon을 사용하는 경우 PORT 3000이 nodemonConfig에 설정되어 있다고 생각합니다. 그것이 사실인지 확인하십시오.
참고 URL : https://stackoverflow.com/questions/18008620/node-js-express-js-app-only-works-on-port-3000
'IT' 카테고리의 다른 글
Servlet 2.5와 3의 차이점은 무엇입니까? (0) | 2020.09.07 |
---|---|
생산성 전원 도구가 포함 된 Visual Studio 2010의 어두운 테마 (0) | 2020.09.07 |
NullPointerException이 발생하지 않는 이유는 무엇입니까? (0) | 2020.09.07 |
Spark에서 출력 디렉터리를 사용하는 방법 (0) | 2020.09.07 |
"… 모듈이 아닌 것으로 해석되고 해석이 구성을 사용하여 수 없음"은 무엇을 의미합니까? (0) | 2020.09.07 |