Nodejs-connect 미들웨어

추가,원문 링크:https://github.com/alsotang/node-lessons/tree/master/lesson18
HTTP
Nodejs 의 고전 httpServer 코드
var http = require('http');

var server = http.createServer(requestHandler);
function requestHandler(req, res) {
  res.end('hello visitor!');
}
server.listen(3000);

함수  requestHandler  모든 http 요청 의 응답 함수 입 니 다.즉,모든 요청 은 이 함수 의 처 리 를 거 쳐 모든 요청 의 입구 함수 입 니 다.
requestHandler 함 수 를 통 해 우 리 는 간단 한 http 논 리 를 쓸 수 있 습 니 다.예 를 들 어 위의 예,모든 요청 을 되 돌려 줍 니 다.  hello visitor!
그러나 우리 의 업무 논 리 는 이렇게 간단 할 수 없다.예 를 들 어 인 터 페 이 스 를 실현 해 야 합 니 다.요청 이 왔 을 때 원본 의 요청 이 요청 체 를 포함 하 는 지 판단 한 다음 에 요청 체 의 id 가 데이터베이스 에 존재 하 는 지 판단 하고 마지막 에 존재 하면 true 로 돌아 가 며 존재 하지 않 으 면 false 로 돌아 갑 니 다.
1.             ,         ;
1.        id    ,          ;
1.              ;

우리 가 먼저 생각 한 것 은 추출 함수,모든 논리 적 함수,간단 하고 저 결합 유지 보 수 를 실현 합 니 다.
구현 코드:
function parseBody(req, callback) {
  //  http   req   body
  callback(null, body);
}
function checkIdInDatabase(body, callback) {
  //  body.id Database   ,    
  callback(null, dbResult);
}
function returnResult(dbResult, res) {
  if (dbResult && dbResult.length > 0) {
    res.end('true');
  } else {
    res.end('false')
  }
}
function requestHandler(req, res) {
  parseBody(req, function(err, body) {
    checkIdInDatabase(body, function(err, dbResult) {
      returnResult(dbResult, res);
    });
  });
}

위의 해결 방안 은 세 가지 절 차 를 포함 한 업무 문 제 를 해결 하고 세 가지 가 발생 했다.  });  그리고 세 개.  err  처리 가 필요 합 니 다.위의 쓰 기 는 기대 하 는 효 과 를 거 둘 수 있 습 니 다.
그러나 업무 논리 가 갈수 록 복잡 해 지면 서 30 개의 리 턴 논리 로 출발 해 30 개가 나 왔 다.  });  및 30 개  .이상더 심각 한 것 은 코드 를 쓸 때 자신 이 쓴 논리 가 30 층 중 어느 층 에 있 는 지 전혀 보이 지 않 고 나타 나 기 쉽다 는 것 이다. 여러 번 되돌아오다 지방 으로 돌아 가 는 것 이 옳지 않다 는 등 문제 가 있다. 피 라 미 드 를 되돌리다. 문제 야.
대부분의 학생 들 은 피 라 미 드 를 되 돌 리 는 방법 을 생각 할 수 있 을 것 이다.박 령 의 에서 말 한 세 가지 방법 이다.이 세 가지 방법 에 ES6 에 새로 추 가 된 제 너 레이 터 를 더 해 총 네 가지 해결책 을 열거 했다.
EventProxy —— 이벤트 게시 구독 모드(제4 과 까지)BlueBird —— Promise 방안(제1 7 과 까지)Async —— 비동기 프로 세 스 제어 라 이브 러 리
Generator —— ES6 원생 발생 기이론 적 으로 이 네 가 지 는 모두 피라미드 문 제 를 해결 할 수 있다.커 넥 트 와 익 스프 레 스 는  err  。
비동기 프로 세 스 제어 라 이브 러 리 에 대해 간략하게 소개 하거나 이동@제5 과.비동기 프로 세 스 제어 라 이브 러 리 는 먼저 사용자 에 게 실행 중인 함수 목록 을 전송 하고 funlist 로 기록 하도록 요구 합 니 다.프로 세 스 제어 라 이브 러 리 의 임 무 는 이 함수 들 을 순차 실행 。
콜백 은 순 서 를 제어 하 는 관건 입 니 다.funlist 의 함 수 는 콜백 을 호출 할 때마다 다음 funlist 의 함 수 를 실행 합 니 다.
우 리 는 비슷 한 체인 호출 을 실현 하기 시작 했다.   이름 을 바꾸다  funlistmiddlewares  이름 을 바꾸다  callback사 이 즈 는 다음 과 같 습 니 다.
var middlewares = [
  function fun1(req, res, next) {
    parseBody(req, function(err, body) {
      if (err) return next(err);
      req.body = body;
      next();
    });
  },
  function fun2(req, res, next) {
    checkIdInDatabase(req.body.id, function(err, rows) {
      if (err) return next(err);
      res.dbResult = rows;
      next();
    });
  },
  function fun3(req, res, next) {
    if (res.dbResult && res.dbResult.length > 0) {
      res.end('true');
    }
    else {
      res.end('false');
    }
    next();
  }
]

function requestHandler(req, res) {
  var i=0;

  // middlewares    
  function next(err) {

    if (err) {
      return res.end('error:', err.toString());
    }

    if (i<middlewares.length) {
      middlewares[i++](req, res, next);
    } else {
      return ;
    }
  }

  //     middleware
  next();
}

위 에 서 는 middlewares+next 로 업무 논 리 를 완성 하 였 습 니 다.  next미 들 웨 어 스 의 모든 함 수 는 하나 입 니 다. 
전체적인 사고방식 은:
모든   list 에 저장 하기;.
요청 도착 시  ( )  list 의 
Connect 의 실현
Connect 의 사상 은 위 에서 논술 한 사상 과 대체적으로 똑 같 습 니 다.먼저 처리 논 리 를 저장 한 다음 에 순환 적 으로 호출 합 니 다.
Connect 에는 주로 다섯 개의 함수 PS 가 있 습 니 다.Connect 의 핵심 코드 는 200+줄 입 니 다.원본 코드 를 대조 하여 아래 함수 소 개 를 보 는 것 을 권장 합 니 다.
함수 명
역할.
createServer
포장 httpServer 형성 app
listen
감청 포트 함수
use
middlewares 에 비 즈 니스 논리 넣 기
handle
이전 장의 requestHandler 함수 증강 판
call
비 즈 니스 논리의 진정한 집행자
Express
익 스프 레 스 는 커 넥 트 의 업그레이드 버 전 이라는 것 을 모두 가 알 고 있다.
Express 는 Connect 의 업그레이드 버 전 뿐만 아니 라 업무 논리 처리 에 편리 하도록 많은 대상 을 봉인 했다.Express 의 Router 는 Connect 의 업그레이드 버 전 입 니 다.
Express 는 몇 개의 모듈 로 나 눌 수 있 습 니 다.
모듈
묘사 하 다.
router
경로 모듈 은 Connect 업그레이드 버 전 입 니 다.
request
Express 패 키 징 을 거 친 req 대상
response
Express 패 키 징 을 거 친 res 대상
application
app 위의 각종 기본 설정
각 모듈 을 간략하게 소개 하 다.

좋은 웹페이지 즐겨찾기