Node.js 미들웨어 가 어떻게 작 동 하 는 지 자세히 알 아 보 세 요.

9113 단어 Nodejs중간 부품
익 스프 레 스 미들웨어 가 무엇 입 니까?
4.567917.중간 부품 은 말 그대로 소프트웨어 의 한 층 과 다른 층 사이 에 놓 인 모든 것 을 의미한다
  • Express 미들웨어 는 Express 서버 가 요청 한 수명 주기 내 에 실 행 된 함수 입 니 다
  • 4.567917.모든 미들웨어 는 추 가 된 모든 경로 의 HTTP 요청 과 응답 에 접근 할 수 있 습 니 다4.567917.또한 미들웨어 는 HTTP 요청 을 중지 할 수도 있 고 next 로 다른 미들웨어 함수 에 전달 할 수도 있다.미들웨어 의 이러한'체인'은 코드 를 구분 하고 재 활용 가능 한 미들웨어 를 만 들 수 있 습 니 다Express 미들웨어 작성 요구 사항
    Express 미들웨어 를 만 들 고 사용 하 며 테스트 할 물건 이 필요 합 니 다.우선 Node 와 npm 가 필요 합 니 다.설치 되 어 있 는 지 확인 하기 위해 실행 가능:
    
    npm -v && node -v
    설 치 된 Node 와 NPM 버 전 을 보 셔 야 합 니 다.오류 가 발생 하면 Node 를 설치 해 야 합 니 다.모든 예 는 Node ver 8+와 NPM ver 5+에서 사용 해 야 합 니 다.
    본 고 는 Express 4.x 판 을 사용 하 였 다.이것 은 매우 중요 하 다.왜냐하면 3.x 판 에서 4.x 판 까지 중대 한 변경 이 있 기 때문이다.
    Express 미들웨어:기초
    우선 우 리 는 Express 의 가장 기본 적 인 내장 중간 부품 을 사용한다.새 항목 을 만 들 고 npm 초기 화...
    
    npm init
    npm install express --save
    
    Create server.js and paste the following code:
    
    const express = require('express');
    const app = express();
    
    app.get('/', (req, res, next) => {
      res.send('Welcome Home');
    });
    
    app.listen(3000);
    중간 부품 은 어떤 문 제 를 해결 합 니까?이 걸 왜 써 요?
    웹 서버 에서 Node.js 와 Express 를 사용 하여 웹 프로그램 을 실행 하고 있다 고 가정 하 십시오.이 응용 프로그램 에서 로그 인 할 페이지 가 필요 합 니 다.
    웹 서버 가 데이터 요청 을 받 았 을 때 Express 는 사용자 와 요청 한 데이터 에 대한 정 보 를 포함 하 는 요청 대상 을 제공 합 니 다.Express 는 또한 응답 대상 에 접근 할 수 있 고 웹 서버 가 사용자 에 게 응답 하기 전에 수정 할 수 있 습 니 다.이 대상 들 은 보통 req,res 로 단축 된다.
    미들웨어 함 수 는 관련 정 보 를 사용 하여 req 와 res 대상 을 수정 하 는 이상 적 인 장소 입 니 다.예 를 들 어 사용자 가 로그 인 한 후에 데이터베이스 에서 사용자 의 상세 한 정 보 를 얻 은 다음 에 이 상세 한 정 보 를 res.user 에 저장 할 수 있 습 니 다.
    중간 부품 함 수 는 어떤 것 입 니까?
    
    async function userMiddleware (req, res, next) {
        try {
            const userData = await getUserData(req.params.id);  //see app.get below
    
            if(userData) {
                    req.user = userData;
                    next();
            }
        } catch(error)  {
            res.status(500).send(error.message); //replace with proper error handling
        }
    }
    오류 가 발생 하고 다른 코드 를 실행 하고 싶 지 않 으 면 이 함 수 를 호출 하지 마 십시오.이러한 상황 에서 응답 을 보 내야 한 다 는 것 을 기억 하 십시오.그렇지 않 으 면 클 라 이언 트 는 시간 이 초 과 될 때 까지 응답 을 기다 릴 것 입 니 다.
    
    var app = express();
    
    //your normal route Handlers
    app.get('/user/:id', userMiddleware, userController);
    미들웨어 체인
    미들웨어 배열 이나 여러 app.use 변조 로 미들웨어 를 연결 할 수 있 습 니 다.
    
    app.use(middlewareA);
    app.use(middlewareB);
    app.get('/', [middlewareC, middlewareD], handler);
    Express 가 요청 을 받 으 면 요청 과 일치 하 는 모든 미들웨어 는 작업 이 종 료 될 때 까지 초기 화 된 순서대로 실 행 됩 니 다.

    따라서 오류 가 발생 하면 오류 처리 에 사용 되 는 모든 미들웨어 를 순서대로 호출 하여 next()함수 가 호출 되 지 않 을 때 까지 호출 합 니 다.
    Express 미들웨어 유형
    공유 기 급 미들웨어,예 를 들 어 router.use
  • 중간 부품,예 를 들 어 express.static,express.json,express.urlencoded
  • 오류 처리 미들웨어,예 를 들 어 app.use(err,req,res,next)
  • 제3자 중간 부품,예 를 들 어 bodyparser,cookieparser공유 기 급 미들웨어
  • express.Router 는 express.Router 류 를 사용 하여 모듈 화 되 고 설치 가능 한 경로 로 처리 합 니 다.루트 실례 는 완전한 중간 부품 과 루트 시스템 이다.중간 부품 으로 로그 기록,인증 등 을 할 수 있 습 니 다.다음 과 같이 사용자 의 최신 활동 을 기록 하고 인증 레이 블 을 분석 하여 현재 로그 인 한 사용 자 를 확인 하고 Request 대상 에 추가 합 니 다.이 함 수 는 프로그램 이 요청 을 받 을 때마다 실 행 됩 니 다.오류 가 있 으 면 응답 만 끝 낼 뿐 후속 미들웨어 나 경로 로 처리 하지 않 습 니 다
  • 
    var router = express.Router()
    Load router-level middleware by using the router.use() and router.METHOD() functions.
    The following example creates a router as a module, loads a middleware function in it, defines some routes, and mounts the router module on a path in the main app.
    var express = require(‘express');
    var router = express.Router();
    
    // a middleware function with no mount path. This code is executed for every request to the router
    // logging
    async function logMiddleware (req, res, next) {
        try {
             console.log(req.user.id, new Date());
         next();
        } catch() {
            res.status(500).send(error.message);
        }
    }
    // authentication
        async function checkAuthentication(req, res, next) => {
    // check header or url parameters or post parameters for token
    const token = req.body.token || req.query.token || req.headers['x-access-token'] || req.headers['authorization'];
          if (token) {
            try {
                // verifies secret
                req.decoded = await jwt.verify(token, config.secret)
    
                let checkUser = await authenticateTokenHelper.getUserDetail(req);
    
                // if everything is good, save to request for use in other routes
                    if (checkUser) {
                            req.user = req.decoded
                            next()
                    } else {
                        return res.status(403).json({ 
                        message: responseMessage.noAuthorized 
                        })
                    }
            } catch (err) {
                return res.status(401).json({ message: responseMessage.invalidToken })
            }
      } else {
        // if there is no token
        return res.status(400).json({ message: responseMessage.invalidRequest })
      }
    }
    router.use(logMiddleware);
        router.get('/user, checkAuthentication, handler);
    내장 미들웨어
    Express 는 아래 에 내 장 된 미들웨어 기능 이 있 습 니 다.
  • express.static 은 html 파일,이미지 등 정적 자원 을 제공 합 니 다
  • express.json 부하 해석 은 JSON 으로 들 어 오 는 요청 입 니 다
  • express.urlencoded 는 들 어 오 는 URL 인 코딩 의 유효 부하 요청 을 분석 합 니 다
  • 오류 처리 미들웨어
    오류 처리 미들웨어 는 항상 네 개의 인자(err,req,res,next)를 사용 합 니 다.너 는 네 개의 매개 변 수 를 제공 함으로써 그것 을 오류 처리 미들웨어 함수 로 표시 해 야 한다.next 대상 을 사용 할 필요 가 없 더 라 도 지정 해 야 합 니 다.그렇지 않 으 면 next 대상 은 일반적인 미들웨어 로 해석 되 고 오 류 를 처리 할 수 없습니다.기본 서명 은 다음 과 같다.
    
    app.use(function (err, req, res, next) {
      console.error(err.stack)
      res.status(500).send('Something broke!')
    })
    예 1:
    
    app.get('/users', (req, res, next) => {
      next(new Error('I am passing you an error!'));
    });
    app.use((err, req, res, next) => {
      console.log(err);    
      if(!res.headersSent){
        res.status(500).send(err.message);
      }
    });
    이 경우 파이프 말단 의 오류 처리 미들웨어 가 이 오 류 를 처리 할 것 이다.내 가 res.headerssent 속성 을 검 사 했 음 을 알 수 있 을 것 이다.이것 은 응답 이 클 라 이언 트 에 레이 블 을 보 냈 는 지 확인 하 는 것 입 니 다.아직 없 으 면 클 라 이언 트 에 HTTP 500 상태 와 오류 메 시 지 를 보 냅 니 다.
    예 2:
    중간 부품 을 잘못 처리 하 는 것 도 연결 할 수 있 습 니 다.일반적으로 서로 다른 방식 으로 서로 다른 유형의 오 류 를 처리 합 니 다.
    
    app.get('/users, (req, res, next) => {
      let err = new Error('I couldn\'t find it.');
      err.httpStatusCode = 404;
      next(err);
    });
    
    app.get('/user, (req, res, next) => {
      let err = new Error('I\'m sorry, you can\'t do that, Dave.');
      err.httpStatusCode = 304;
      next(err);
    });
    
    app.use((err, req, res, next) => {
       // handles not found errors
      if (err.httpStatusCode === 404) {
        res.status(400).render('NotFound');
      }
       // handles unauthorized errors 
      else if(err.httpStatusCode === 304){
        res.status(304).render('Unauthorized');
      }
        // catch all
       else if (!res.headersSent) {
         res.status(err.httpStatusCode || 500).render('UnknownError');
      }
      next(err);
    });
    이 경우 미들웨어 검사 에서 404(not found)오류 가 발생 했 는 지 확인 합 니 다.만약 그렇다면,"NotFound"템 플 릿 페이지 를 렌 더 링 한 다음,중간 부품 의 다음 항목 에 오 류 를 전달 합 니 다다음 중간 부품 검사 에서 304(unauthorized)오류 가 발생 했 는 지 확인 합 니 다.이 경우"Unauthorized"페이지 를 렌 더 링 하고 파이프 의 다음 미들웨어 에 오 류 를 전달 합 니 다
  • 마지막 으로"catch all"오류 처 리 는 오류 만 기록 합 니 다.응답 을 보 내지 않 으 면 잘못된 httpStatusCode(제공 되 지 않 으 면 HTTP 500 상 태 를 보 냅 니 다)를 보 내 고"UnknownError"템 플 릿 을 렌 더 링 합 니 다
  • 제3자 등급 의 중간 부품
    어떤 경우 에 우 리 는 백 엔 드 에 추가 기능 을 추가 할 것 이다.Node.js 모듈 을 설치 하여 필요 한 기능 을 가 져 온 다음 응용 단계 나 공유 기 단계 에서 응용 프로그램 에 불 러 옵 니 다.
    예제:body-parser 가 Content-type 요청 헤 더 를 처리 할 때 모든 미들웨어 는 해 석 된 본문 으로 req.body 속성 을 채 웁 니 다.
    
    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    app.use(bodyParser.urlencoded({extended:false}))
    app.use(bodyParser.json())
    app.post('/save',(req,res)=>{
        res.json({
            "status":true,
             "payload":req.body
        })
    }
    app.listen(3000,(req,res)=>{
        console.log('server running on port')
    })
    총결산
    미들웨어 기능 은 모든 요청 이나 특정 경로 에 대한 모든 요청 실행 코드 를 실행 하고 요청 이나 응답 데이터 에 대해 조 치 를 취 할 수 있 는 아주 좋 은 방식 이다.미들웨어 는 현대 웹 서버 의 중요 한 구성 부분 이 며 매우 유용 하 다.
    이상 은 Node.js 미들웨어 가 어떻게 작 동 하 는 지 에 대한 상세 한 내용 입 니 다.Node.js 미들웨어 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기