[node.js] NodeJS / Express :“app.use”란 무엇입니까?

에서 NodeJS에 대한 문서 express모듈 , 예 코드 갖는다 app.use(...).

use기능 은 무엇 이며 어디에 정의되어 있습니까?



답변

응용 프로그램 개체는 Express 서버를 만들 때 인스턴스화됩니다. 사용자 정의 할 수 있는 미들웨어 스택 이 있습니다 app.configure()(이제 버전 4.x에서 더 이상 사용되지 않음) .

미들웨어를 설정하려면 app.use(<specific_middleware_layer_here>)추가하려는 모든 미들웨어 계층에 대해 호출 할 수 있으며 (모든 경로에 대해 일반적이거나 서버가 처리하는 특정 경로에서만 트리거 될 수 있음) Express 미들웨어 스택에 추가됩니다 . 미들웨어 계층은 여러 번의 호출로 하나씩 추가 use하거나 한 번의 호출로 한 번에 모두 추가 할 수 있습니다 . 자세한 내용은 use설명서 를 참조하십시오.

Express Middleware의 개념 이해에 대한 예를 제공하기 위해 다음은 내 앱 객체를 콘솔에 JSON으로 로깅 할 때 내 앱 미들웨어 스택 (app.stack)의 모습입니다.

stack: 
   [ { route: '', handle: [Function] },
     { route: '', handle: [Function: static] },
     { route: '', handle: [Function: bodyParser] },
     { route: '', handle: [Function: cookieParser] },
     { route: '', handle: [Function: session] },
     { route: '', handle: [Function: methodOverride] },
     { route: '', handle: [Function] },
     { route: '', handle: [Function] } ]

당신은 추론 할 수있을 때, 나는 전화 app.use(express.bodyParser()), app.use(express.cookieParser())등, 미들웨어 스택이 명시 미들웨어 ‘층’을 추가하는합니다. 경로는 비어 있습니다. 즉, 해당 미들웨어 레이어를 추가 할 때 경로에서 트리거되도록 지정했습니다. 위의 스택 출력에서 ​​해당 미들웨어 계층 객체 /user/:idroute필드에 문자열로 반영되는 경로에서만 트리거되는 사용자 정의 미들웨어 계층을 추가 한 경우 .

각 계층은 기본적으로 미들웨어를 통한 흐름에 무언가를 처리하는 기능을 추가합니다.

예를 들어 bodyParser, 서버를 통해 명시 적 미들웨어를 통해 들어오는 요청을 처리 할 수 ​​있습니다 . 따라서 이제는 수신 요청 본문을 구문 분석하는 것이 호출을 요청 했기 때문에 수신 요청을 처리 할 때 미들웨어가 수행하는 절차의 일부입니다app.use(bodyParser) .


답변

useExpress HTTP 서버 오브젝트의 라우트에서 사용되는 미들웨어를 구성하는 방법입니다. 이 방법은 Express가 기반으로하는 Connect의 일부로 정의 됩니다.

업데이트 버전 4.x부터 Express는 더 이상 Connect에 의존하지 않습니다 .

이전에 Express에 포함 된 미들웨어 기능은 이제 별도의 모듈에 있습니다. 미들웨어 기능 목록을 참조하십시오 .


답변

app.use (middleware) 는 요청이 서버로 전송 될 때마다 호출됩니다.


답변

미들웨어 함수를 마운트하거나 지정된 경로에 마운트하는 데 사용되는 app.use () 미들웨어 함수는 기본 경로가 일치 할 때 실행됩니다.

예를 들어
indexRouter.js에서 app.use ()를 사용하는 경우 다음과 같습니다.

//indexRouter.js

var adsRouter = require('./adsRouter.js');

module.exports = function(app) {
    app.use('/ads', adsRouter);
}

위의 코드 app.use ()에서 ‘/ ads’의 경로를 adsRouter.js로 마운트하십시오.

이제 adsRouter.js에서

// adsRouter.js

var router = require('express').Router();
var controllerIndex = require('../controller/index');
router.post('/show', controllerIndex.ads.showAd);
module.exports = router;

adsRouter.js에서 ads- ‘/ ads / show’의 경로는 다음과 같으며 controllerIndex.ads.showAd ()에 따라 작동합니다.

app.use ([path], callback, [callback]) :
콜백을 추가 할 수 있습니다.

app.use('/test', function(req, res, next) {

  // write your callback code here.

    });


답변

app.use () 는 express 앱에서 미들웨어 역할을합니다. 달리 app.get ()app.post () 정도, 실제로 사용할 수 있습니다 () app.use 요청 URL을 지정하지 않고. 이 경우 어떤 URL이 적중 되더라도 매번 실행됩니다.


답변

app.use ()는 다음과 같이 작동합니다.

  1. 노드 http 서버 인스턴스에서 요청 이벤트가 심사되었습니다.
  2. express는 req 객체로 내부 조작을 수행합니다.
  3. app.use로 지정한 작업을 express가 시작하는 시점입니다.

매우 간단합니다.

그리고 나서야 만 표현은 라우팅과 같은 나머지 작업을 수행합니다.


답변

app.use(function middleware1(req, res, next){
   // middleware1 logic
}, function middleware1(req, res, next){
   // middleware2 logic
}, ... middlewareN);

app.use 는 미들웨어 등록 순서에 따라 엔드 라우트 논리 또는 중간 라우트 논리를 실행하기 전에 미들웨어 또는 미들웨어 체인 (또는 다중 미들웨어) 을 등록하는 방법 입니다.

미들웨어 : 형태 체인 기능 / 미들웨어 기능 을 가진 3 개 파라미터 REQ, 입술, 옆 . 다음은 체인의 다음 미들웨어 기능 및 체인의 마지막 미들웨어 기능의 경우 다음 등록 미들 체인의 첫 번째 미들웨어 기능을 가리키는 콜백입니다.