이 글은 Nodejs의 "양파 모델"을 이해하는 데 도움이 될 것입니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
현재 더 인기 있는 Node.js 프레임워크에는 Express, KOA 및 Egg.js가 포함되며, 그 뒤를 이어 또 다른 신흥 TypeScript 관련 프레임워크인 Nest.js가 구현됩니다. 미들웨어를 기반으로 하며, 미들웨어의 실행 방법(클래스 또는 함수 모듈로 이해 가능)은 양파 모델을 기반으로 해야 합니다
추천 학습: "nodejs tutorial"
양파의 중심점을 통과하기 위해서는 먼저 양파껍질을 중심점까지 한 겹씩 침투한 후 중심점에서 바깥쪽으로 한 겹씩 침투해야 함을 알 수 있습니다 여기에는 특징이 있습니다. 들어갈 때 피부가 몇 겹 제거되었는지, 나갈 때 피부가 몇 겹 닳아야 하는지입니다. 먼저 표피를 관통한 다음 표피를 빠져나옵니다. 이는 우리가 스택 목록이라고 부르는 선입선출의 원리를 따릅니다.
2. 양파 모델과 Node의 관계
양파의 껍질은 미들웨어로 생각할 수 있습니다:
외부에서 내부로의 프로세스는 다음 키워드( );그리고 내부에서 외부로 각 미들웨어가 실행된 후 원래 미들웨어의 상위 계층으로 들어가 가장 바깥쪽 계층까지 진행됩니다.
3. 미들웨어 실행
Koa는 Express를 기반으로 같은 팀에서 개발한 차세대 노드 프레임워크입니다. 주요 차이점:
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 */ app.use(async (req, res, next) => { console.log('first'); await next(); console.log('first end'); });
Rerun, 최종 출력 결과는
외부에서 내부로 호출하는 것이 일반적이라고 볼 수 있으며, 호출은 레이어별로 이루어집니다. 그러나 내부에서 외부로 호출할 때 몇 가지 변경 사항이 있는 것은
비동기 미들웨어가 출력되지 않는다는 것입니다. 실행 결과는 순서대로.
(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');
});
KOA는 위에서 아래로, 즉 양파 내부에서 외부로 첫 번째, 두 번째, 비동기, 세 번째로 양파 모델의 실행을 엄격하게 따르고 있음을 알 수 있습니다. 내부에서 외부로 세 번째 끝, 비동기 끝, 두 번째 끝, 첫 번째 끝을 출력합니다.
더 많은 프로그래밍 관련 지식을 보려면
프로그래밍 교육위 내용은 Nodejs의 '양파 모델'에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!