programing

Express.js - app.listen vs server.listen

bestprogram 2023. 5. 22. 21:53

Express.js - app.listen vs server.listen

이것은 매우 기본적인 질문일 수 있지만 저는 도저히 이해할 수 없습니다.Express.js를 사용하여 앱을 만드는 것과 포트 1234에서 앱 수신을 시작하는 것의 차이점은 무엇입니까? 예:

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

//app.configure, app.use etc

app.listen(1234);

http 서버 추가:

var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);

//app.configure, app.use etc

server.listen(1234);

뭐가 달라요?
탐색할 경우http://localhost:1234그래서 저는 같은 출력을 얻습니다.

두 번째 양식(Express가 HTTP 서버를 대신 작성하도록 하는 대신 HTTP 서버를 직접 작성)은 HTTP 서버를 다시 사용하려는 경우에 유용합니다. 예를 들어,socket.io동일한 HTTP 서버 인스턴스 내:

var express = require('express');
var app     = express();
var server  = require('http').createServer(app);
var io      = require('socket.io').listen(server);
...
server.listen(1234);

하지만,app.listen()또한 HTTP 서버 인스턴스를 반환하므로 조금만 다시 쓰면 HTTP 서버를 직접 만들지 않고도 비슷한 작업을 수행할 수 있습니다.

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

// app.use/routes/etc...

var server    = app.listen(3033);
var io        = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
  ...
});

앱을 사용하는 것과 http 서버를 듣는 것의 또 다른 차이점은 https 서버를 설정하고 싶을 때입니다.

https를 설정하려면 아래 코드가 필요합니다.

var https = require('https');
var server = https.createServer(app).listen(config.port, function() {
    console.log('Https App started');
});

express의 앱은 http 서버만 반환하므로 express로 설정할 수 없으므로 https server 명령을 사용해야 합니다.

var express = require('express');
var app = express();
app.listen(1234);

시간 엄수를 위해 팀의 답변을 조금 연장합니다.
공식 문서에서:

express()에서 반환한 앱은 사실 요청을 처리하기 위한 콜백으로 Node의 HTTP 서버에 전달되도록 설계된 JavaScript 함수입니다.

이를 통해 HTTP 및 HTTPS 버전의 앱을 모두 동일한 코드 기반으로 쉽게 제공할 수 있습니다(단순한 콜백).

var https =require('https');
var http = require('http');
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

app.listen() 메서드는 http를 반환합니다.서버 개체 및 (HTTP용)은 다음에 대한 편리한 방법입니다.

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

같은 질문으로 왔는데 구글 검색 결과 큰 차이가 없습니다 :)

깃허브에서

HTTP 및 HTTPS 서버를 모두 생성하려면 여기에 표시된 "http" 및 "https" 모듈을 사용하여 생성할 수 있습니다.

/**
 * Listen for connections.
 *
 * A node `http.Server` is returned, with this
 * application (which is a `Function`) as its
 * callback. If you wish to create both an HTTP
 * and HTTPS server you may do so with the "http"
 * and "https" modules as shown here:
 *
 *    var http = require('http')
 *      , https = require('https')
 *      , express = require('express')
 *      , app = express();
 *
 *    http.createServer(app).listen(80);
 *    https.createServer({ ... }, app).listen(443);
 *
 * @return {http.Server}
 * @api public
 */

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

또한 socket.io 과 함께 작업하려면 예제를 참조하십시오.

항목 보기

선호합니다app.listen():)

Express는 기본적으로 개발자의 편의를 위해 만들어진 http 모듈의 래퍼입니다.

  1. 이들은 익스프레스를 사용하여 HTTP 요청에 응답하도록 미들웨어를 설정할 수 있습니다.
  2. 그들은 express를 사용하여 템플릿에 인수를 전달하는 것을 기반으로 HTML 페이지를 동적으로 렌더링할 수 있습니다.
  3. 또한 익스프레스를 사용하여 라우팅을 쉽게 정의할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17696801/express-js-app-listen-vs-server-listen