JavaScript를 잘 알고 있지만 Node.js 생태계 의이 세 가지 프로젝트가 정확히 무엇을하는지 혼란 스럽습니다 . Rails 'Rack과 같은 것입니까? 누군가 설명해 주시겠습니까?
JavaScript를 잘 알고 있지만 Node.js 생태계 의이 세 가지 프로젝트가 정확히 무엇을하는지 혼란 스럽습니다 . Rails 'Rack과 같은 것입니까? 누군가 설명해 주시겠습니까?
답변:
[ 업데이트 : 4.0 릴리스부터 Express는 더 이상 Connect를 사용하지 않습니다. 그러나 Express는 여전히 Connect 용으로 작성된 미들웨어와 호환됩니다. 내 원래 답변은 다음과 같습니다.]
Node.js를보고있는 사람들에게는 혼동의 여지가 많기 때문에 이에 대해 물어 보니 기쁩니다. 그것을 설명하는 가장 좋은 방법은 다음과 같습니다.
Node.js 자체는 HTTP 모듈을 제공하며 ,이 모듈 은 createServer
HTTP 요청에 응답하는 데 사용할 수있는 객체를 메소드가 반환합니다. 해당 객체는 http.Server
프로토 타입을 상속합니다 .
ConnectcreateServer
는의 확장 버전을 상속하는 객체를 반환하는 메서드 도 제공합니다 http.Server
. Connect의 확장 기능은 주로 미들웨어를 쉽게 연결할 수 있도록하기 위해 제공됩니다 . 이것이 Connect가 자신을 "미들웨어 프레임 워크"라고 설명하는 이유이며 종종 Ruby의 랙과 유사합니다.
Express 는 Connect의 기능을 http 모듈에 createServer
연결합니다 Server
. Connect의 프로토 타입 을 확장 하는 방법을 제공합니다 . 따라서 Connect의 모든 기능 과 뷰 렌더링 및 경로 설명을위한 편리한 DSL이 있습니다. 루비의 시나트라는 좋은 비유입니다.
그리고 더 나아가 Express를 확장하는 다른 프레임 워크가 있습니다! 예를 들어, Zappa 는 CoffeeScript, 서버 측 jQuery 및 테스트에 대한 지원을 통합합니다.
다음은 "미들웨어"의 의미에 대한 구체적인 예입니다. 기본적으로 위의 어느 것도 정적 파일을 제공하지 않습니다. 그러나 connect.static
디렉토리를 가리 키도록 구성된 (Connect와 함께 제공되는 미들웨어)를 던지면 서버가 해당 디렉토리의 파일에 대한 액세스를 제공합니다. Express는 Connect의 미들웨어도 제공합니다. express.static
와 동일합니다 connect.static
. (두 가지 모두 staticProvider
최근까지 알려졌습니다 .)
제 생각에는 대부분의 "실제"Node.js 앱이 요즘 Express로 개발되고 있다는 것입니다. 추가 된 기능은 매우 유용하며 원하는 경우 모든 하위 수준 기능이 그대로 있습니다.
허용 된 답변은 실제로 오래되었습니다 (지금 잘못되었습니다). 다음은 현재 버전의 Connect (3.0) / Express (4.0)를 기반으로 한 정보 (소스 포함)입니다.
단순히 콜백 (req, res)을 취하는 http / https createServer
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
미들웨어 는 기본적으로 애플리케이션 코드와 일부 저수준 API 사이에있는 소프트웨어입니다. Connect는 내장 HTTP 서버 기능을 확장하고 플러그인 프레임 워크를 추가합니다. 플러그인은 미들웨어 역할을하므로 connect는 미들웨어 프레임 워크입니다.
그렇게하는 방법은 매우 간단합니다 ( 사실 코드는 실제로 짧습니다! ). 호출하자마자 다음과 같은 var connect = require('connect'); var app = connect();
기능 app
을 수행 할 수 있습니다.
.use
( source )가 있습니다 ( 이 간단한 코드 행으로 인해 여기에서 제공됨 ).1) 때문에 다음을 수행 할 수 있습니다.
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
2)와 결합하면 다음을 얻을 수 있습니다.
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connect는에 등록 할 수있는 유틸리티 기능을 제공 http
하므로을 (를) 호출 할 필요가 없습니다 http.createServer(app)
. 호출 listen
되고 코드는 단순히 새로운 http 서버를 생성하고, 콜백으로 레지스터를 연결하고 인수를에 전달합니다 http.listen
. 소스에서
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
그래서 당신은 할 수 있습니다 :
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
http.createServer
플러그인 프레임 워크가 위에있는 것은 여전히 오래된 것 입니다.
ExpressJS와 연결은 병렬 프로젝트입니다. 연결은 단지 멋진의와 미들웨어 프레임 워크 use
기능. Express는 Connect에 의존하지 않습니다 ( package.json 참조 ). 그러나 연결하는 모든 작업을 수행합니다.
createServer
를 사용할 수있는 기능 일 뿐이므로 connect 와 같이 등록 할 수 있습니다 .req
res
listen
을 등록 하는 유틸리티 함수connect에서 제공하는 것 (중복을 표현하는 것) 외에도 더 많은 기능이 있습니다. 예 :
use
ExpressJS의 기능 및 연결 호환되므로 인 미들웨어 공유된다 . 둘 다 미들웨어 프레임 워크이며 Express 는 단순한 미들웨어 프레임 워크 이상을 가지고 있습니다 .
내 의견 : 당신은 자신의 선택을 할 수 있도록 위의 내용을 기반으로합니다.
http.createServer
connect / expressjs와 같은 것을 처음부터 작성하는 경우 사용하십시오 .http.createServer
대부분의 사람들은 ExpressJS 만 사용해야합니다.
이것은 어느 시점에서 사실 이었지만 지금은 잘못되었습니다.
확장 된 버전의 http.Server를 상속합니다.
잘못된. 그것은 확장하지 않으며 당신이 본 것처럼 ... 사용
Express는 Connect가하는 일을 http 모듈에 연결합니다
Express 4.0은 연결에 의존하지도 않습니다. 현재 package.json 종속성 섹션을 참조하십시오.
Node.js는 서버 측을위한 자바 스크립트 모터입니다.
모든 js 기능 외에도 HTTP와 같은 네트워킹 기능과 파일 시스템에 대한 액세스가 포함됩니다.
이는 네트워킹 작업이 브라우저에 의해 독점되는 클라이언트 측 js와 다르며 파일 시스템에 대한 액세스는 보안상의 이유로 금지되어 있습니다.
서버에서 실행되고 HTTP를 이해하고 파일에 액세스 할 수있는 것은 웹 서버처럼 들립니다. 그러나 그것은 하나가 아닙니다.
node.js를 웹 서버처럼 동작하게하려면 프로그래밍해야합니다. 들어오는 HTTP 요청을 처리하고 적절한 응답을 제공하십시오.
이것이 Express의 기능입니다. js에서 웹 서버의 구현입니다.
따라서 웹 사이트를 구현하는 것은 Express 경로를 구성하고 사이트의 특정 기능을 프로그래밍하는 것과 같습니다.
페이지 제공에는 많은 작업이 포함됩니다. 이러한 작업 중 다수는 잘 알려져 있으며 매우 일반적이므로 노드의 Connect 모듈 ( 노드에서 실행할 수있는 많은 모듈 중 하나)이 해당 작업을 구현합니다.
현재 인상적인 오퍼링을 참조하십시오.
Connect는 프레임 워크이며이를 통해 필요한 (하위) 모듈을 선택할 수 있습니다. 있는 contrib 미들웨어 페이지는 추가의 긴 목록 열거 미들웨어 .
Express 자체에는 가장 일반적인 Connect 미들웨어가 제공됩니다.
node.js를 설치하십시오.
노드와 함께 제공 NPM 의 노드 패키지 관리자 .
이 명령 npm install -g express
은 전 세계적으로 express를 다운로드하여 설치합니다 ( express guide 확인 ). 노드가 아닌 명령 줄에서
실행 express foo
하면 foo라는 즉시 실행 가능한 응용 프로그램이 만들어집니다. (새로 생성 된) 디렉토리로 변경하고 명령으로 node로 실행 node <appname>
한 다음 열어서 http://localhost:3000
확인하십시오. 지금 당신은에 있습니다.
Node.js
자체는 HTTP 모듈을 제공하며, createServer 메소드는 HTTP 요청에 응답하는 데 사용할 수있는 오브젝트를 리턴합니다. 해당 객체는 http.Server
프로토 타입을 상속합니다 .
관련 정보, 특히 Visual Studio IDE 작업에 NTVS를 사용하는 경우. NTVS는 NodeJS 및 Express 도구, 스캐 폴딩, 프로젝트 템플릿을 Visual Studio 2012, 2013에 추가합니다.
또한 "WebServer"로 ExpressJS 또는 Connect를 호출하는 언어가 올바르지 않습니다. 기본 웹 서버를 사용하거나 사용하지 않고 기본 WebServer를 작성할 수 있습니다. 기본 NodeJS 프로그램은 http 모듈을 사용하여 http 요청을 처리 할 수 있으므로 기본적인 웹 서버가됩니다.
이름에서 알 수 있듯이 미들웨어는 실제로 미들웨어가 중간에 있습니다. 요청과 응답의 중간 .. 요청, 응답, 고속 서버 가이 그림 에서 익스프레스 응용 프로그램 에 앉아있는 방법 클라이언트에서 요청이 오는 것을 볼 수 있고 익스프레스 서버 서버가 해당 요청을 처리하는 것을 볼 수 있습니다. 이러한 방식으로 전체 고속 서버의 전체 작업을 작은 별도의 작업으로 변환합니다. 미들웨어가 요청과 응답 사이에 어떻게 특정 작업을 수행하고 다음 작업으로 요청을 전달한 서버 부분의 작은 청크 .. 마지막으로 모든 작업 응답이 수행되었습니다. 모든 미들웨어가 요청 오브젝트, 응답 오브젝트 및 다음 요청 기능에 액세스 할 수 있습니다. 응답주기
이것은 미들웨어에 대한 표현 YouTube 비디오에서 미들웨어 를 설명하는 좋은 예입니다.