>웹 프론트엔드 >JS 튜토리얼 >Nodejs의 '양파 모델'에 대한 심층 분석

Nodejs의 '양파 모델'에 대한 심층 분석

青灯夜游
青灯夜游앞으로
2021-05-07 10:29:554121검색

이 글은 Nodejs의 "양파 모델"을 이해하는 데 도움이 될 것입니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

Nodejs의 '양파 모델'에 대한 심층 분석

현재 더 인기 있는 Node.js 프레임워크에는 Express, KOA 및 Egg.js가 포함되며, 그 뒤를 이어 또 다른 신흥 TypeScript 관련 프레임워크인 Nest.js가 구현됩니다. 미들웨어를 기반으로 하며, 미들웨어의 실행 방법(클래스 또는 함수 모듈로 이해 가능)은 양파 모델을 기반으로 해야 합니다

추천 학습: "nodejs tutorial"

1. 우리 모두는 양파 모델입니다. 양파가 있습니다. 한 레이어가 다른 레이어를 레이어별로 감싸고 있지만 이제 3차원 구조를 보는 대신 그림에 표시된 대로 양파를 자르고 절단 평면에서 살펴봐야 합니다.

Nodejs의 양파 모델에 대한 심층 분석 양파의 중심점을 통과하기 위해서는 먼저 양파껍질을 중심점까지 한 겹씩 침투한 후 중심점에서 바깥쪽으로 한 겹씩 침투해야 함을 알 수 있습니다 여기에는 특징이 있습니다. 들어갈 때 피부가 몇 겹 제거되었는지, 나갈 때 피부가 몇 겹 닳아야 하는지입니다. 먼저 표피를 관통한 다음 표피를 빠져나옵니다. 이는 우리가 스택 목록이라고 부르는 선입선출의 원리를 따릅니다.

2. 양파 모델과 Node의 관계

현재 가장 많이 사용되는 Node.js 프레임워크에는 Express, KOA, Egg.js가 있습니다. 어떤 Node.js 프레임워크이든지 미들웨어, 미들웨어를 기반으로 구현됩니다. ( 클래스 또는 함수 모듈로 이해 가능) 실행 방법은 양파 모델을 기반으로 해야 합니다

양파의 껍질은 미들웨어로 생각할 수 있습니다:

외부에서 내부로의 프로세스는 다음 키워드( );

그리고 내부에서 외부로 각 미들웨어가 실행된 후 원래 미들웨어의 상위 계층으로 들어가 가장 바깥쪽 계층까지 진행됩니다.

3. 미들웨어 실행

Express를 예로 들면, 미들웨어의 기본 실행 과정은 다음과 같습니다.

,

Nodejs의 양파 모델에 대한 심층 분석Nodejs의 양파 모델에 대한 심층 분석Koa는 Express를 기반으로 같은 팀에서 개발한 차세대 노드 프레임워크입니다. 주요 차이점:

Express는 연결 및 라우터와 같은 많은 내장 미들웨어를 캡슐화하고 있는 반면 KOA는 상대적으로 가볍고 개발자는 자신의 필요에 따라 프레임워크를 사용자 정의할 수 있습니다.
  • Express는 다음을 기반으로 미들웨어를 처리합니다. 콜백을 기반으로 하는 반면 KOA는 wait/async를 기반으로 합니다.
  • 미들웨어를 비동기적으로 실행할 때 Express는 미들웨어 실행을 위해 어니언 모델을 엄격하게 따르지 않는 반면 KOA는 이를 엄격하게 따릅니다(미들웨어가 비동기식인 경우 두 프로세스가 다르다는 점을 반영). 비동기 기능이 다릅니다).
어니언 모델 실행에 관한 Express와 KOA의 차이점 소개

: 우리는

위 예제 코드의 원래 세 가지 미들웨어를 유지하면서 2와 3 사이에 새로운 비동기 미들웨어를 삽입합니다

. 코드는 다음과 같습니다:

(1) express

/**
 * 异步中间件
 */
app.use(async (req, res, next) => {
    console.log('async');
    await next();
    await new Promise(
        (resolve) => 
            setTimeout(
                () => {
                    console.log(`wait 1000 ms end`);
                    resolve()
                }, 
            1000
        )
    );
    console.log('async end');
});
그런 다음 다음 미들웨어 1 메서드에 표시된 대로 다른 미들웨어를 wait next() 메서드로 수정합니다.

/**
 * 中间件 1
 */
app.use(async (req, res, next) => {
    console.log('first');
    await next();
    console.log('first end');
});

Rerun, 최종 출력 결과는

Nodejs의 양파 모델에 대한 심층 분석외부에서 내부로 호출하는 것이 일반적이라고 볼 수 있으며, 호출은 레이어별로 이루어집니다. 그러나 내부에서 외부로 호출할 때 몇 가지 변경 사항이 있는 것은

비동기 미들웨어가 출력되지 않는다는 것입니다. 실행 결과는 순서대로

.

(2) Koa

위의 코드 순서를 유지하고 해당 표현 구문만 koa 구문으로 변경합니다. 미들웨어 1 및 비동기 미들웨어 코드 부분은 다음과 같습니다.

const Koa = require('koa');
const app = new Koa();
/**
 * 中间件 1
 */
app.use(async (ctx, next) => {
    console.log('first');
    await next();
    console.log('first end');
});
/**
 * 异步中间件
 */
app.use(async (ctx, next) => {
    console.log('async');
    await next();
    await new Promise(
        (resolve) => 
            setTimeout(
                () => {
                    console.log(`wait 1000 ms end`);
                    resolve()
                }, 
            1000
        )
    );
    console.log('async end');
});
다시 실행하면 최종 출력 결과는 다음과 같습니다.

Nodejs의 양파 모델에 대한 심층 분석 KOA는 위에서 아래로, 즉 양파 내부에서 외부로 첫 번째, 두 번째, 비동기, 세 번째로 양파 모델의 실행을 엄격하게 따르고 있음을 알 수 있습니다. 내부에서 외부로 세 번째 끝, 비동기 끝, 두 번째 끝, 첫 번째 끝을 출력합니다.

더 많은 프로그래밍 관련 지식을 보려면

프로그래밍 교육

을 방문하세요! !

위 내용은 Nodejs의 '양파 모델'에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제