에서 NodeJS에 대한 문서 express
모듈 , 예 코드 갖는다 app.use(...)
.
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/:id
의 route
필드에 문자열로 반영되는 경로에서만 트리거되는 사용자 정의 미들웨어 계층을 추가 한 경우 .
각 계층은 기본적으로 미들웨어를 통한 흐름에 무언가를 처리하는 기능을 추가합니다.
예를 들어 bodyParser
, 서버를 통해 명시 적 미들웨어를 통해 들어오는 요청을 처리 할 수 있습니다 . 따라서 이제는 수신 요청 본문을 구문 분석하는 것이 호출을 요청 했기 때문에 수신 요청을 처리 할 때 미들웨어가 수행하는 절차의 일부입니다app.use(bodyParser)
.
next()
각 미들웨어가 파이프 라인의 다음 기능으로 처리를 전달하기 위해 호출 할 콜백입니다. 라우팅 시스템 (에 대한 첫 번째 인수는 app.use()
) URL에 따라 지점에 파이프 라인 수 있습니다
use
Express HTTP 서버 오브젝트의 라우트에서 사용되는 미들웨어를 구성하는 방법입니다. 이 방법은 Express가 기반으로하는 Connect의 일부로 정의 됩니다.
업데이트 버전 4.x부터 Express는 더 이상 Connect에 의존하지 않습니다 .
이전에 Express에 포함 된 미들웨어 기능은 이제 별도의 모듈에 있습니다. 미들웨어 기능 목록을 참조하십시오 .
app.use(function(){ var object = new SomeConstructor; next(); })
각 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 ()는 다음과 같이 작동합니다.
매우 간단합니다.
그리고 나서야 만 표현은 라우팅과 같은 나머지 작업을 수행합니다.
app.use(function middleware1(req, res, next){
// middleware1 logic
}, function middleware1(req, res, next){
// middleware2 logic
}, ... middlewareN);
app.use 는 미들웨어 등록 순서에 따라 엔드 라우트 논리 또는 중간 라우트 논리를 실행하기 전에 미들웨어 또는 미들웨어 체인 (또는 다중 미들웨어) 을 등록하는 방법 입니다.
미들웨어 : 형태 체인 기능 / 미들웨어 기능 을 가진 3 개 파라미터 REQ, 입술, 옆 . 다음은 체인의 다음 미들웨어 기능 및 체인의 마지막 미들웨어 기능의 경우 다음 등록 미들 체인의 첫 번째 미들웨어 기능을 가리키는 콜백입니다.
app.use
미들웨어가 필요한 기능입니다. 예를 들면 다음과 같습니다.
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
이 예는 /user/:id
경로에 설치된 미들웨어 기능을 보여줍니다 . 이 기능은 /user/:id
경로 에있는 모든 유형의 HTTP 요청에 대해 실행됩니다 .
REST 웹 서버와 유사하며 /xx
다른 조치를 나타 내기 위해 다른 것을 사용하십시오 .
use
할 수 있는지에 대한 모든 설명이 필요하다고 생각하지 않습니다 . 나는 그것이 그것이 무엇인지 알 필요가 있었다.
app.use 는 앱 요청을위한 미들웨어 로 작동합니다. 통사론
app.use('pass request format',function which contain request response onject)
예
app.use('/',funtion(req,res){
console.log(all request pass through it);
// here u can check your authentication and other activities.
})
또한 요청을 라우팅 할 때 사용할 수 있습니다.
app.use('/', roting_object);
미들웨어는 "함께 결합"하는 소프트웨어의 일반적인 용어이므로 app.use는 미들웨어를 구성하는 방법입니다 (예 : 요청 본문 구문 분석 및 처리). app.use (bodyParser.urlencoded ({extended : true })); app.use (bodyParser.json ()); Express 응용 프로그램에서 사용할 수있는 많은 미들웨어가 문서를 읽으십시오. http://expressjs.com/en/guide/using-middleware.html
app.use는 지정된 미들웨어를 기본 앱 미들웨어 스택에 적용합니다. 기본 앱 스택에 미들웨어를 첨부 할 때 첨부 순서가 중요합니다. 미들웨어 B 앞에 미들웨어 A를 연결하면 미들웨어 A가 항상 먼저 실행됩니다. 특정 미들웨어가 적용 가능한 경로를 지정할 수 있습니다. 아래 예에서 "hello world"는 항상 "happy holidays"전에 기록됩니다.
const express = require('express')
const app = express()
app.use(function(req, res, next) {
console.log('hello world')
next()
})
app.use(function(req, res, next) {
console.log('happy holidays')
next()
})
그것은 당신이 (모든 미들웨어를 사용할 수 있습니다 더 읽기 등) body_parser
, CORS
등 미들웨어는 변경 할 수 request
및 response
개체를. 또한 코드를 실행할 수도 있습니다.
당신은 또한 같은 자신의 미들웨어 기능을 만들 수 있습니다
app.use( function(req, res, next) {
// your code
next();
})
그것은 세 가지 매개 변수를 포함 req
, res
, next
를 청소 컨트롤러를 유지하기 위해 인증 및 입력 PARAMS의 확인을 위해 사용할 수 있습니다.
next()
다음 미들웨어 또는 경로로 이동하는 데 사용됩니다.
미들웨어로부터 응답을 보낼 수 있습니다
app.use () 및 app.METHOD () 함수를 사용하여 애플리케이션 레벨 미들웨어를 앱 오브젝트의 인스턴스에 바인드하십시오. 여기서 METHOD는 미들웨어 함수가 처리하는 요청의 HTTP 메소드 (예 : GET, PUT 또는 POST)를 소문자로 입력하십시오.
간단히 말해 app.use ()는 모든 유형의 요청 (예 : get, post, ...)을 지원하므로 대부분 미들웨어를 설정하는 데 사용됩니다. 경로와 기능이 분리 된 경우에 사용 가능
예:
app.use("/test",functionName)
functionName은 다른 파일에 있습니다.
app.use는 애플리케이션 레벨 미들웨어입니다.
app.use () 및 app.METHOD () 함수를 사용하여 애플리케이션 레벨 미들웨어를 앱 오브젝트의 인스턴스에 바인드하십시오. 여기서 METHOD는 미들웨어 함수가 처리하는 요청의 HTTP 메소드 (예 : GET, PUT 또는 POST)를 소문자로 입력하십시오.
app.use를 사용하여 요청에서 토큰을 확인하여 미들웨어를 작성해야하는 토큰 / 액세스 토큰을 확인하려는 경우와 같이 모든 요청을 확인하는 데 사용할 수 있습니다.
이 예는 마운트 경로가없는 미들웨어 기능을 보여줍니다. 이 함수는 앱이 요청을받을 때마다 실행됩니다.
var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
app.use (path, middleware) 는 경로가 해당 경로에 도달하기 전에 호출해야하는 미들웨어 함수를 호출하는 데 사용됩니다. app.use를 통해 여러 미들웨어 함수를 호출 할 수 있습니다.
app.use ( '/ fetch', enforceAuthentication) -> enforceAuthentication 미들웨어 fn은 '/ fetch'로 시작 하는 요청이 수신될 때 호출됩니다. 그것은 할 수 있습니다 / / 사용자 가져 오기 , / 가져 오기 / IDS / {ID} 등
요청과 상관없이 일부 미들웨어 기능을 호출해야 할 수도 있습니다. 이러한 경우 경로가 지정되지 않으며 경로의 기본값은 / 이고 모든 요청은 /로 시작하므로 모든 요청 에 대해이 미들웨어 함수가 호출됩니다.
app.use (() => {// 공통 서비스 초기화})
여러 미들웨어 함수가 app.use 로 전달 될 때 각 미들웨어 함수 내에서 next () fn을 호출해야합니다 . 그렇지 않으면 다음 미들웨어 함수가 호출되지 않습니다.
참조 : http://expressjs.com/en/api.html#app.use
참고 : 문서는 호출하여 우리는 현재 다음과 같은 미들웨어 기능을 우회 할 수 말한다 ( '경로') 다음 현재 미들웨어 함수 내,하지만이 기술은 app.use에서 나를 위해 일을하지 않았다 하지만 app.METHOD로 일했다 아래와 같이 . 따라서 fn1과 fn2는 호출되었지만 fn3은 호출되지 않았습니다.
app.get('/fetch', function fn1(req, res, next) {
console.log("First middleware function called");
next();
},
function fn2(req, res, next) {
console.log("Second middleware function called");
next("route");
},
function fn3(req, res, next) {
console.log("Third middleware function will not be called");
next();
})