express.js 미들웨어 설명 상세 설명
본 논문 에서 나 는 미들웨어 와 경로 처리 절차 간 의 차 이 를 설명 할 것 이다.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);
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
express를 사용하여 AWS S3 이미지에 액세스하기 위해 미리 서명된 URL을 생성하는 방법은 무엇입니까?이를 달성하는 방법 중 하나는 미리 서명된 URL을 사용하는 것입니다. However, the object owner can optionally share objects with others by creating a...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.