나만의 Express 미들웨어 만들기
17841 단어 tutorialwebdevtypescriptjavascript
Express를 사용했다면
bodyParser
또는 jsonParser
와 같은 미리 빌드된 미들웨어를 이미 사용했을 수 있습니다. 이 가이드에서는 사용자 지정 미들웨어를 만드는 방법을 살펴보겠습니다.Express에서 미들웨어 생성
미들웨어는 단순히 데이터가 실제 최종 위치로 가는 도중에 통과하는 것입니다. 다음과 같은 경로가 있다고 가정합니다.
import express from 'express';
const app = express()
app.get('/home/', (req, res, next) => {
if(req.getRoute == true) {
res.status(200).send("Hello world!")
}
else {
res.status(200).send("Goodbye world!")
}
})
이 예에서 요청 또는
req
의 속성getRoute
이 true로 설정된 경우 다른 텍스트 집합을 표시합니다. 기본적으로 HTTP 요청에는 getRoute
라는 속성이 없습니다. 물론 /home/
자체 내에서 설정하는 것은 쉽지만 이 하나의 getRoute
속성에 따라 여러 요청이 있다고 상상해 보십시오.import express from 'express';
const app = express()
app.get('/home/', (req, res, next) => {
if(req.getRoute == true) {
res.status(200).send("Hello world!")
}
else {
res.status(200).send("Goodbye world!")
}
})
app.get('/home/article', (req, res, next) => {
if(req.getRoute == false) {
res.status(200).send("This is my article");
}
else {
res.status(400).send("ERROR OCCURRED");
}
})
이제 미들웨어가 의미가 있는 상황이 되었습니다.
use()
를 사용하거나 함수를 통해 미들웨어를 정의하는 두 가지 방법이 있습니다. 먼저 use()
를 살펴보겠습니다.미들웨어로 use()
이전 예제를 고려하면
use()
를 사용하여 모든 경로에서 실행되는 함수를 작성할 수 있습니다. 따라서 이것은 사용자가 서버의 유효한 경로로 이동할 때마다 실행되는 일반 미들웨어입니다. 다음은 getRoute
미들웨어 내에서 use()
를 정의하는 예입니다.app.use((req, res, next) => {
// Add getRoute to our request object
req.getRoute = true;
// Next tells express to now go to the next valid function.
next();
});
app.get('/home/', (req, res, next) => {
if(req.getRoute == true) {
res.status(200).send("Hello world!")
}
else {
res.status(200).send("Goodbye world!")
}
})
app.get('/home/article', (req, res, next) => {
if(req.getRoute == false) {
res.status(200).send("This is my article");
}
else {
res.status(400).send("ERROR OCCURRED");
}
})
이 미들웨어를 사용하여 요청에
getRoute
를 추가할 수 있으며 이제 /home/
및 /home/article
에서 사용할 수 있습니다. 서버의 다른 경로에서도 사용할 수 있습니다. next()
를 호출하면 Express에 다음 유효한 경로로 이동하도록 지시합니다. 예를 들어 사용자가 /home/
로 이동하면 먼저 미들웨어가 호출되고 그 안에서 next()
를 호출했기 때문에 Express는 정의한 대로 /home/
경로로 이동합니다.사용 사례: API 확인
일반화된 미들웨어에 자주 사용하는 트릭은 특정 HTTP 메서드에 적용되는 기능을 분할하는 것입니다. 예를 들어 API 확인 기능을 모든
POST
요청에 적용하려는 경우 전체 앱에서 사용하는 표준 미들웨어에서 쉽게 수행할 수 있습니다.import { apiVerification } from './util.js'
app.use(async (req, res, next) => {
// Here, apiVerification is a function that returns true if the right request is sent.
// We only want to apply it to POST methods, though, so lets add that to our middleware.
if(req.method == "POST") {
let verifyCredentials = await apiVerification(req);
if(verifyCredentials) {
next();
}
else {
res.status(400).send("ERROR OCCURRED");
}
}
else {
// For everything else, like "GET", go to next valid route.
next();
}
});
이는 매번
POST
를 재정의하고 호출할 필요 없이 모든 apiVerification
경로에 표준 확인 방법을 추가하는 완벽한 방법입니다. apiVerification
가 실패하면 대신 사용자에게 오류 메시지가 표시됩니다. GET
와 같은 다른 방법의 경우 이 apiVerification
단계를 건너뜁니다.특정 미들웨어
때로는 미들웨어가 일반적으로 모든 것이 아니라 특정 경로에만 적용되기를 원할 수 있습니다. 이를 위해서는 함수에서 정의해야 합니다. 이전 예제를 사용하여
req.getRoute
에 대한 함수를 만들고 원하는 경로에만 적용할 수 있습니다.let setGetRoute = (req, res, next) => {
req.getRoute = true;
}
app.get('/home/', setGetRoute, (req, res, next) => {
if(req.getRoute == true) {
res.status(200).send("Hello world!")
}
else {
res.status(200).send("Goodbye world!")
}
})
app.get('/home/article', (req, res, next) => {
if(req.getRoute == undefined) {
res.status(200).send("This is my article");
}
else {
res.status(400).send("ERROR OCCURRED");
}
})
이제
req.getRoute
는 app.get('/home/'..
에만 사용할 수 있습니다. 해당 기능을 해당 경로( app.get('/home/', setGetRoute...
)에만 추가했기 때문입니다. /home/article
의 경우 req.getRoute
를 사용할 수 없습니다.이는 특정 상황에서만 특정 기능을 제공하려는 경우 매우 유용합니다.
결론
미들웨어는 Express의 강력한 부분이며 요청을 다르게 처리하거나 모든 요청에 특정 기능을 적용할 수 있습니다. 이 기사를 즐겼기를 바랍니다. learn more about Javascript, click here에게 .
Reference
이 문제에 관하여(나만의 Express 미들웨어 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/smpnjn/making-your-own-express-middleware-3a2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)