익스프레스 미들웨어 작성

https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62에서 Amazon에서 내 책을 확인하십시오.

지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.

미들웨어 함수는 요청 및 응답 객체에 접근할 수 있는 함수이며, 다음 미들웨어를 호출하기 위한 next 함수입니다.

이 기사에서는 Express 미들웨어의 기능과 작성 방법을 살펴보겠습니다.

미들웨어의 특징



미들웨어 함수는 모든 코드를 실행하고, 요청 및 응답 객체를 변경하고, 요청-응답 주기를 종료하고, 스택의 다음 미들웨어를 호출할 수 있습니다.

미들웨어는 다음 코드와 유사할 수 있습니다.

app.get('/', (req, res, next) => {  
  next();  
});


위의 코드는 미들웨어가 호출될 요청 메소드를 가지고 있는데, 이는 getapp.get 입니다.

그런 다음 경로 경로인 '/'가 있습니다.

마지막으로 우리가 전달하는 미들웨어 함수는 각각 처음 2개의 매개변수로 요청 및 응답 객체를 가지며 다음 미들웨어를 실행하기 위해 호출하는 next 함수를 갖습니다.

예시



예를 들어 / 경로에 대한 요청을 할 때 일부 출력을 기록하는 미들웨어를 작성할 수 있습니다.

우리는 이것을 다음과 같이 쓸 수 있습니다:

const express = require('express')  
const app = express()
app.use(express.json())  
app.use(express.urlencoded({ extended: true }))

app.get('/', (req, res, next) => {  
  console.log('middleware called');  
  next();  
});

app.get('/', (req, res) => {  
  res.send();  
})

app.listen(3000, () => console.log('server started'));

next/ 경로에 대한 경로 처리기를 호출합니다.
middleware called 출력과 빈 응답에서 console.log를 얻어야 합니다.

모든 경로에 대한 미들웨어를 로드하려면 app.use 대신 app.METHOD를 사용할 수 있습니다. 여기서 METHOD는 소문자입니다.

예를 들어 다음과 같이 앱 차원의 미들웨어를 작성할 수 있습니다.

const express = require('express')  
const app = express()
app.use(express.json())  
app.use(express.urlencoded({ extended: true }))

app.use((req, res, next) => {  
  console.log('middleware called');  
  next();  
});

app.get('/', (req, res) => {  
  res.send();  
})

app.listen(3000, () => console.log('server started'));


우리는 이전과 같은 것을 얻어야 하지만 다음과 같은 경우:

const express = require('express')  
const app = express()
app.use(express.json())  
app.use(express.urlencoded({ extended: true }))

app.use((req, res, next) => {  
  console.log('middleware called');  
  next();  
});

app.get('/', (req, res) => {  
  res.send();  
})

app.post('/foo', (req, res) => {  
  res.send('foo');  
})

app.listen(3000, () => console.log('server started'));

middleware called 에 GET 요청을 하고 / 에 POST 요청을 하면 /foo 를 얻습니다.

요청 및 응답 개체 수정



새 속성을 첨부하고 요청 및 응답 개체에 대한 값을 설정할 수 있습니다.

예를 들어 다음과 같이 작성할 수 있습니다.

const express = require('express')  
const app = express()
app.use(express.json())  
app.use(express.urlencoded({ extended: true }))

app.use((req, res, next) => {  
  req.requestTime = Date.now();  
  next();  
});

app.get('/', (req, res) => {  
  res.json(req.requestTime);  
})

app.post('/foo', (req, res) => {  
  res.json(req.requestTime);  
})

app.listen(3000, () => console.log('server started'));


그런 다음 / 에 GET 요청을 하고 /foo 에 POST 요청을 할 때 요청이 이루어진 타임스탬프를 얻습니다.

마찬가지로 응답 객체와 유사한 작업을 수행할 수 있습니다.

const express = require('express')  
const app = express()
app.use(express.json())  
app.use(express.urlencoded({ extended: true }))

app.use((req, res, next) => {  
  res.responseTime = Date.now();  
  next();  
});

app.get('/', (req, res) => {  
  res.json(res.responseTime);  
})

app.post('/foo', (req, res) => {  
  res.json(res.responseTime);  
})

app.listen(3000, () => console.log('server started'));


또한 / 에 GET 요청을 하고 /foo 에 POST 요청을 할 때 응답이 만들어진 타임스탬프를 얻을 것입니다.

구성 가능한 미들웨어



선택적 매개변수가 있는 함수를 만들고 미들웨어 함수를 반환하여 구성 가능한 미들웨어 기능을 만들 수 있습니다.

예를 들어 다음과 같이 작성할 수 있습니다.

const express = require('express')  
const app = express()  
app.use(express.json())  
app.use(express.urlencoded({ extended: true }))

const configurableMiddleware = (options) => {  
  return (req, res, next) => {  
    req.options = options;  
    next();  
  }  
}

app.use(configurableMiddleware({ date: new Date(), foo: 'bar' }));

app.get('/', (req, res) => {  
  res.json(req.options);  
})

app.listen(3000, () => console.log('server started'));

configurableMiddleware 함수는 옵션 객체를 매개변수로 취한 다음 req.options 속성이 options 매개변수로 설정된 미들웨어 함수를 반환합니다.

그런 다음 / 경로에 요청하면 다음을 얻습니다.

{"date":"2019-12-23T22:37:04.927Z","foo":"bar"}


응답으로.

결론



경로 처리기 또는 다른 미들웨어가 실행되기 전에 Express 미들웨어 기능을 사용하여 코드를 실행할 수 있습니다.

미들웨어 함수를 생성하려면 처음 2개의 매개변수로 요청 및 응답 객체를 사용하고 세 번째 매개변수로 다음 함수를 사용하여 함수를 생성하면 됩니다.

새 속성을 추가하고 값을 설정하여 요청 및 응답 개체를 수정할 수 있습니다.

그런 다음 next를 호출하여 다음 미들웨어 또는 경로 처리기를 호출합니다.

options 매개변수를 사용하고 미들웨어 함수를 반환하는 함수를 만들어 구성 가능한 미들웨어를 만들 수 있습니다.

좋은 웹페이지 즐겨찾기