NodeJS: 서버의 포트를 가져오는 방법은 무엇입니까?
Http 서버를 만들고 포트에서 수신을 시작한 다음 다음 다음 행에 따라 처리하는 노드의 hello 월드 코드 예제를 자주 볼 수 있습니다.
console.log('Server is listening on port 8000');
하지만 이상적으로 당신은 이것 대신에 이것을 원할 것입니다.
console.log('Server is listening on port ' + server.port);
를 하지 않고 하려면 어떻게 합니까?server.listen()
?
이전에 이런 작업을 한 적이 있는데 노드 설명서에서 찾을 수가 없습니다.표현할 수 있는 특별한 것이 아닐까요?
Express 4.x 답변:
Express 4.x(아래 Tien Do의 답변에 따라)는 이제 app.listen()을 비동기 연산으로 처리하므로 listener.address()는 app.listen()의 콜백 내부의 데이터만 반환합니다.
var app = require('express')();
var listener = app.listen(8888, function(){
console.log('Listening on port ' + listener.address().port); //Listening on port 8888
});
익스프레스 3 답변:
찾고 계신 것 같습니다. (특급은?)
console.log("Express server listening on port %d", app.address().port)
( )에서 할 때 을 보았을 수 express
명령:
alfred@alfred-laptop:~/node$ express test4
create : test4
create : test4/app.js
create : test4/public/images
create : test4/public/javascripts
create : test4/logs
create : test4/pids
create : test4/public/stylesheets
create : test4/public/stylesheets/style.less
create : test4/views/partials
create : test4/views/layout.jade
create : test4/views/index.jade
create : test4/test
create : test4/test/app.test.js
alfred@alfred-laptop:~/node$ cat test4/app.js
/**
* Module dependencies.
*/
var express = require('express');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.use(express.bodyDecoder());
app.use(express.methodOverride());
app.use(express.compiler({ src: __dirname + '/public', enable: ['less'] }));
app.use(app.router);
app.use(express.staticProvider(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', function(req, res){
res.render('index.jade', {
locals: {
title: 'Express'
}
});
});
// Only listen on $ node app.js
if (!module.parent) {
app.listen(3000);
console.log("Express server listening on port %d", app.address().port)
}
Express v3.0에서는
/* No longer valid */
var app = express.createServer();
app.listen();
console.log('Server running on %s', app.address().port);
더 이상 작동하지 않습니다!Express v3.0의 경우 다음과 같은 방법으로 앱과 서버를 생성해야 합니다.
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
app.get('/', function(req, res) {
res.send("Hello World!");
});
server.listen(3000);
console.log('Express server started on port %s', server.address().port);
저는 이 문제를 직접 접했고 새로운 구문을 문서화하고 싶었습니다.Express v3.0의 이 변경 사항 및 기타 변경 사항은 https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x 에서 확인할 수 있습니다.
요청 처리 시 포트가 필요하여 앱을 사용할 수 없는 경우 다음을 사용할 수 있습니다.
request.socket.localPort
현재 버전(v0.5.0-pre)에서는 포트를 서버 개체의 속성으로 사용할 수 있는 것 같습니다. http://nodejs.org/docs/v0.4.7/api/net.html#server.address 을 참조하십시오.
var server = http.createServer(function(req, res) {
...
}
server.listen(8088);
console.log(server.address());
console.log(server.address().address);
console.log(server.address().port);
산출물들
{ address: '0.0.0.0', port: 8088 }
0.0.0.0
8088
익스프레스 4는 이런 식으로 사용합니다.
app.listen(1337, function(){
console.log('Express listening on port', this.address().port);
});
이를 사용하면 리스너/서버에 별도의 변수를 사용할 필요가 없습니다.
express를 사용하는 경우 요청 개체에서 가져올 수 있습니다.
req.app.settings.port // => 8080 or whatever your app is listening at.
http 모듈을 필요로 하지 않았습니다.
의 http
Express 3 또는 4에는 필요 없습니다. 할당listen()
충분합니다.
var server = require('express')();
server.get('/', function(req, res) {
res.send("Hello Foo!");
});
var listener = server.listen(3000);
console.log('Your friendly Express server, listening on port %s', listener.address().port);
// Your friendly Express server, listening on port 3000
다시 말하지만, 이는 Express 3.5.1 및 4.0.0에서 테스트되었습니다.ghttp
그럴 필요가 없었습니다.수신 메서드는 http 서버 개체를 반환합니다.https://github.com/visionmedia/express/blob/master/lib/application.js#L531
req.headers.host.split(':')[1]
포트 번호를 정의하지 않은 경우, 포트 번호가 실행 중인 포트를 알고 싶을 경우.
let http = require('http');
let _http = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello..!')
}).listen();
console.log(_http.address().port);
참고로, 매번 다른 포트에서 실행됩니다.
최신 node.js(v0.3.8-pre)인 경우:문서를 확인하고 http.createServer()에서 반환된 서버 인스턴스를 검사하고 server.listen()의 소스 코드를 읽었습니다.
안타깝게도 포트는 로컬 변수로 일시적으로 저장될 뿐이며 처리를 위한 호출에서 인수로 끝납니다.binding ('net'). 기본 방법인 bind().저는 더 멀리 보지 않았습니다.
server.listen()에 제공한 포트 값을 참조하는 것보다 더 좋은 방법은 없는 것 같습니다.
var express = require('express');
var app = express();
app.set('port', Config.port || 8881);
var server = app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + server.address().port);
});
포트 8881에서 Express 서버 수신
이전 스타일에서 새(Express 3.x) 스타일로 변환하는 가장 간단한 방법은 다음과 같습니다.
var server = app.listen(8080);
console.log('Listening on port: ' + server.address().port);
3.x 이전 버전은 다음과 같이 작동합니다.
/* This no longer works */
app.listen(8080);
console.log('Listening on port: ' + app.address().port);
포트 번호는 다음을 사용하여 얻을 수 있습니다.server.address().port
아래와 같은 코드:
var http = require('http');
var serverFunction = function (req, res) {
if (req.url == '/') {
console.log('get method');
res.writeHead(200, { 'content-type': 'text/plain' });
res.end('Hello World');
}
}
var server = http.createServer(serverFunction);
server.listen(3002, function () {
console.log('server is listening on port:', server.address().port);
});
저도 이 질문을 하고 나서 Express 4.x 가이드 페이지에 샘플을 보러 왔습니다.
var server = app.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});
그findandbind
npm은 express/refinify/connect를 위해 이 문제를 해결합니다. https://github.com/gyllstromk/node-find-and-bind
const express = require('express');
const morgan = require('morgan')
const PORT = 3000;
morgan.token('port', (req) => {
return req.app.locals.port;
});
const app = express();
app.locals.port = PORT;
app.use(morgan(':method :url :port'))
app.get('/app', function(req, res) {
res.send("Hello world from server");
});
app1.listen(PORT);
당신은 아마도 당신이 찾고 있을 것입니다.process.env.PORT
. 이를 통해 "환경 변수"라고 하는 것을 사용하여 청취 포트를 동적으로 설정할 수 있습니다.Node.js 코드는 다음과 같습니다.
const port = process.env.PORT || 3000;
app.listen(port, () => {console.log(`Listening on port ${port}...`)});
단말기에서 동적 변수를 수동으로 설정할 수도 있습니다.export PORT=5000
, 아니면 원하는 항구든 상관없습니다
express v4+
const app = require("express")();
app.listen( 5555, function() {
console.log( this.address().port )
})
전화하는 게 더 쉬운 방법입니다.app.get('url')
, 프로토콜, 하위 도메인, 도메인 및 포트를 제공합니다.
언급URL : https://stackoverflow.com/questions/4840879/nodejs-how-to-get-the-servers-port
'sourcecode' 카테고리의 다른 글
키보드가 사라질 때의 Android White 배경 (0) | 2023.10.10 |
---|---|
스위프트에서 UILabel의 선 간격을 늘리는 방법 (0) | 2023.10.10 |
결측값이 있는 열의 부분 집합에 대한 행 단위 평균 (0) | 2023.10.10 |
PHP 읽기 전용 속성? (0) | 2023.10.10 |
mysql 결과에서 제외할 사용자 호스트 쌍 제공 (0) | 2023.10.10 |