express.js 미들웨어 설명 상세 설명

7575 단어 express중간 부품
express 의 새로운 개발 자 들 은 종종 루트 처리 프로그램 과 중간 부품 간 의 차이 에 대해 곤 혹 스 러 워 한다.그래서 그들 도 app.use(),app.all(),app.get(),app.post(),app.delete()와 app.put()방법의 차이 에 곤 혹 스 러 워 한다.
본 논문 에서 나 는 미들웨어 와 경로 처리 절차 간 의 차 이 를 설명 할 것 이다.app.use(),app.all(),app.get(),app.post(),app.delete()와 app.put()방법 을 정확하게 사용 하 는 방법 입 니 다.
경로 처리
app.use(),app.all(),app.get(),app.post(),app.delete()와 app.put()는 모두 경 로 를 정의 하 는 데 사 용 됩 니 다.이 방법 들 은 모두 경 로 를 정의 하 는 데 쓰 인 다.루트 는 HTTP 요청 을 처리 하 는 데 사 용 됩 니 다.루트 는 경로 와 리 셋 의 조합 으로 요청 한 경로 가 일치 할 때 실 행 됩 니 다.리 셋 은 루트 처리 프로그램 이 라 고 불 린 다.
이들 의 차 이 는 서로 다른 유형의 HTTP 요청 을 처리 하 는 것 이다.예 를 들 어 app.get()방법 은 get 요청 만 처리 하고 app.all()은 GET,POST 등 요청 을 처리 합 니 다.
다음은 하나의 예 입 니 다.길 을 어떻게 정의 합 니까?

var app = require("express")();

app.get("/", function(req, res, next){
  res.send("Hello World!!!!");
});

app.listen(8080);

모든 경로 처리 프로그램 은 현재 제공 되 고 있 는 HTTP 요청 과 응답 대상 에 대한 인용 을 받 습 니 다.
하나의 HTTP 에 여러 경로 처리 프로그램 을 요청 할 수 있 습 니 다.이것 은 하나의 예 이다.

var app = require("express")();

app.get("/", function(req, res, next){
  res.write("Hello");
  next();
});

app.get("/", function(req, res, next){
  res.write(" World !!!");
  res.end();
});

app.listen(8080);

첫 번 째 핸들 에 응답 을 기록 한 다음 next()를 호출 합 니 다.next()방법 은 경로 경로 와 일치 하 는 다음 경로 처리 프로그램 을 호출 하 는 데 사 용 됩 니 다.
경로 처리 프로그램 은 요청 을 끝내 거나 다음 경로 처리 프로그램 을 호출 해 야 합 니 다.
우 리 는 또한 여러 개의 경로 처리 프로그램 을 app.all(),app.get(),app.post(),app.delete()와 app.put()방법 에 전달 할 수 있다.
이것 은 이 점 을 증명 하 는 예 이다.

var app = require("express")();

app.get("/", function(req, res, next){
  res.write("Hello");
  next();
}, function(req, res, next){
  res.write(" World !!!");
  res.end();
});

app.listen(8080);

중간 부품
중간 부품 은 실제 요청 처리 프로그램 위 에 있 는 리 셋 입 니 다.그것 은 경로 처리 프로그램 과 같은 인 자 를 사용한다.
미들웨어 를 알 고 싶 으 면 dashboard 와 profflee 페이지 가 있 는 예제 사이트 를 보 겠 습 니 다.이 페이지 에 접근 하려 면 사용자 가 로그 인해 야 합 니 다.이 페이지 에 대한 요청 도 기록 합 니 다.
다음은 이 페이지 의 경로 처리 프로그램의 코드 입 니 다.

var app = require("express")();

function checkLogin(){
  return false;
}

function logRequest(){
  console.log("New request");
}

app.get("/dashboard", function(req, res, next){

  logRequest();

  if(checkLogin()){
    res.send("This is the dashboard page");
  }
  else{
    res.send("You are not logged in!!!");
  }
});

app.get("/profile", function(req, res, next){

  logRequest();

  if(checkLogin()){
    res.send("This is the dashboard page");
  }
  else{
    res.send("You are not logged in!!!");
  }
});

app.listen(8080);
문 제 는 로그 Request()와 checkLogin()함 수 를 여러 번 사용 해 야 한 다 는 중복 코드 가 많 습 니 다.이것 도 코드 를 업데이트 하 는 것 을 어렵 게 만 들 었 다.따라서 이 문 제 를 해결 하기 위해 서 우 리 는 이 두 경 로 를 위해 일반적인 경 로 를 만 들 수 있다.
이것 은 다시 쓴 코드 입 니 다.

var app = require("express")();

function checkLogin(){
  return false;
}

function logRequest(){
  console.log("New request");
}

app.get("/*", function(req, res, next){
  logRequest();
  next();
})

app.get("/*", function(req, res, next){
  if(checkLogin()){
    next();
  }
  else{
    res("You are not logged in!!!");
  }
})

app.get("/dashboard", function(req, res, next){
  res.send("This is the dashboard page");
});

app.get("/profile", function(req, res, next){
  res.send("This is the dashboard page");
});

app.listen(8080);
이곳 의 코드 는 더욱 뚜렷 해 보이 고 유지 와 업데이트 가 더욱 쉽다.이전 두 개의 정 의 된 경로 처리 프로그램 을 미들웨어 라 고 부 릅 니 다.요청 을 처리 하지 않 고 예비 처리 요청 을 담당 하기 때 문 입 니 다.
Express 는 중간 부품 을 정의 하 는 데 사용 되 는 app.use()방법 을 제공 합 니 다.app.use()방법 은 app.all()과 유사 해 보일 수 있 지만 차이 가 많아 서 app.use()는 중간 부품 을 설명 하 는 데 매우 적합 합 니 다.app.use()방법 이 어떻게 작 동 하 는 지 보 여 주세요.
app.use()와 app.all()의 차이 점:
CALLBACK
app.use()는 하나의 반전 만 필요 하고 app.all()은 여러 번 반전 할 수 있 습 니 다.
PATH
app.use()는 url 이 지정 한 경로 로 시작 하 는 지,app.all()이 전체 경로 와 일치 하 는 지 만 봅 니 다.
여기에 설명 할 예 가 하나 있다.

app.use( "/product" , mymiddleware);
// will match /product
// will match /product/cool
// will match /product/foo

app.all( "/product" , handler);
// will match /product
// won't match /product/cool  <-- important
// won't match /product/foo  <-- important

app.all( "/product/*" , handler);
// won't match /product    <-- Important
// will match /product/cool
// will match /product/foo

NEXT()
미들웨어 안의 next()는 다음 미들웨어 나 경로 처리 프로그램 을 호출 합 니 다.구체 적 으로 다음 성명 의 그것 에 달 려 있 습 니 다.그러나 루트 처리 프로그램의 next()는 다음 루트 처리 프로그램 만 호출 합 니 다.다음 에 미들웨어 가 있 으 면 뛰 어 넘 습 니 다.따라서 모든 경로 처리 프로그램 에 앞서 미들웨어 를 밝 혀 야 한다.
여기에 설명 할 예 가 하나 있다.

var express = require('express');
var app = express();

app.use(function frontControllerMiddlewareExecuted(req, res, next){
 console.log('(1) this frontControllerMiddlewareExecuted is executed');
 next();
});

app.all('*', function(req, res, next){
 console.log('(2) route middleware for all method and path pattern "*", executed first and can do stuff before going next');
 next();
});

app.all('/hello', function(req, res, next){
 console.log('(3) route middleware for all method and path pattern "/hello", executed second and can do stuff before going next');
 next();
});

app.use(function frontControllerMiddlewareNotExecuted(req, res, next){
 console.log('(4) this frontControllerMiddlewareNotExecuted is not executed');
 next();
});

app.get('/hello', function(req, res){
 console.log('(5) route middleware for method GET and path patter "/hello", executed last and I do my stuff sending response');
 res.send('Hello World');
});

app.listen(80);

현재 우 리 는 app.use()방법의 유일 성과 중간 부품 을 설명 하 는 데 사용 되 는 이 유 를 보 았 다.
예제 사이트 코드 를 다시 쓰 겠 습 니 다:

var app = require("express")();

function checkLogin(){
  return false;
}

function logRequest(){
  console.log("New request");
}

app.use(function(req, res, next){
  logRequest();
  next();
})

app.use(function(req, res, next){

  if(checkLogin()){
    next();
  }
  else{
    res.send("You are not logged in!!!");
  }
})

app.get("/dashboard", function(req, res, next){
  res.send("This is the dashboard page");
});

app.get("/profile", function(req, res, next){
  res.send("This is the dashboard page");
});

app.listen(8080);

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기