1, 오프닝 분석
안녕하세요 여러분, 오늘의 글은 'Connect' 미들웨어와 관련 보조 미들웨어에 대한 소스코드 분석 시리즈를 주로 다루었습니다.
라는 글도 읽어보셨을 거라 생각합니다.용법과 목적을 소개하고 있으며, 이 글 역시 제 개인적인 관심에서 나온 글이므로 독자들이 더 깊이 이해할 수 있도록 분석 단계에서 틀린 부분이 있으면 조언 부탁드립니다.
알겠습니다! 평소처럼 요점을 살펴보겠습니다. 먼저 소개 분석과 결합된 예시를 살펴보겠습니다.
두 번째, 라인별 분석:
(1)의 첫 번째 줄에서는 "connect" 모듈을 소개하고, connect를 통해 http|https 서버를 생성하고, http 서버의 모든 기능을 제공합니다.
"connect" 미들웨어를 사용하면 다양한 방법으로 "서버"를 만들 수 있습니다.
그러면 어떻게 진행되나요? 소스 코드를 확인하세요.
"createServer"를 전역 "exports"에 마운트한 다음 "createServer" 속성을 확장하고 다시 마운트합니다. 목적은 기본 작성 형식과 호환되는 것입니다.
다양한 방법으로 창작의 목적을 달성해보세요. 이는 일상적인 개발 과정에서 누구나 배울 수 있는 아이디어이기도 합니다.
(2) 두 번째 줄 "connect.createServer"를 살펴보고 다음 소스 코드를 살펴보겠습니다.
"HTTPSServer"와 "HTTPServer"는 "HTTPSServer"가 https 메서드를 캡슐화한다는 점을 제외하면 기본적으로 동일합니다. "createServer"를 사용하면 일련의 미들웨어를 전달할 수도 있습니다. 이는 후속 소개와 동일한 효과를 가지지만 루트 디렉터리에만 바인딩될 수 있습니다.
(3), 세 번째 줄 "app.use()"를 계속해서 살펴보고, 수행된 작업은 다음 소스 코드를 살펴보세요.
"connect"는 "http 서버"에서 상속된 프로토타입으로, 서버의 requestListener를 사용된 미들웨어로 대체합니다.
"connect.use(route, handler)"를 사용하여 각 경로에 미들웨어를 추가합니다. 이러한 미들웨어 "핸들"은 "요청"이 있을 때마다 "route"에 바인딩되고 "스택"에 저장됩니다. 요청하셨습니다.
이 힙을 탐색하여 "route"에 해당하는 "handle"을 찾고 "handle"을 실행합니다. "handle"이 최종적으로 "next()"를 호출하면 계속해서 다음 일치하는 "handle"을 찾아서 실행합니다.
"핸들"을 캡슐화하면 "연결"을 기반으로 더 많은 "미들웨어"를 추가하기가 쉽습니다.
(4) 마지막으로 "listen(8888)"을 살펴보세요. 어떤 역할을 하나요?
기본 서버 개체를 상속하면 특정 포트에서 수신 대기하는 "수신" 기능이 제공됩니다.
Server.prototype.__proto__ = http.Server.prototype
다음은 "connect.js"의 전체 소스 코드입니다. 공간을 절약하기 위해 아래와 같이 모든 주석을 삭제했습니다.
추가하자면:
"미들웨어" 개체를 "내보내고" "미들웨어" 개체에 대한 메서드를 루프 정의합니다. 이 방법은 "미들웨어" 폴더에 .js 파일 모듈을 직접 로드하는 것입니다.
용도: "exports.utils.merge(exports,exports.middleware)" 이 문장은 미들웨어의 메소드를 직접 내보냅니다.
세 가지 요약:
(1) 소스 코드의 설계 의도를 이해하면 적용 시 이점을 극대화하는 데 도움이 됩니다.
(2) 소스 코드를 볼 때 문법적인 부분에 주의하기 전에 프로세스를 이해하세요.
(3) 소스 코드의 기발한 구현 아이디어에서 배우되, 지나치게 디자인하지 말고 디자인을 위해 디자인하세요.
(4) 내일부터 관련 미들웨어를 계속 분석해서 업데이트하도록 하겠습니다. . . . . .