이 노트는 "Node.js 교과서"를 공부하면서 기록되었다.
Express 용 기본 속도 제한 미들웨어. 암호 재설정과 같은 공용 API 및 / end point 에 대한 반복 요청을 제한하는 데 사용한다.
nodebird_api에서 사용량을 제한하기 위해 express-rate-limit를 사용한다!
또한 v1.js로 v1 버전을 사용하는데 v2 가 나오게 된다면 /v1으로 요청을 막아야 하는데 이때 미들웨어로 deprecated를 두어 v1 사용을 제한하자!
npm i express-rate-limit
📃 middleware.js
const RateLimit = require('express-rate-limit')
...
// 토큰 너무 자주 발급받지 못하게
exports.apiLimiter = new RateLimit({
windowMs: 60*1000, // 이 시간 동안
max : 1, // 최대 횟수
delayMs:0, // 요청 간 간격
handler(req,res){ // 어겼을 경우 메시지
res.status(this.statusCode).json({
code:this.statusCode, // 기본 429
message:'1분에 한번만 요청할 수 있습니다.'
})
}
})
exports.deprecated = (req,res)=>{
res.status(419).jsom({
code:419,
message:"새로운 버전이 나왔습니다. 새로운 버전을 사용하세요."
})
}
apiLimiter, deprecated 미들웨어를 각각 v2, v1 에 적용해보자!
📃 v2.js
const {verifyToken,apiLimiter} = require('./middlewares')
...
router.post('/token',apiLimiter,async(req,res)=>{
...
verifyToken
처럼 필요한 곳에 미들웨어로 써주면 된다!📃 v1.js
const {verifyToken,deprecated} = require('./middlewares')
...
router.use(deprecated) // 모든 라우터에 이 미들웨어 적용됨 (=app.use)
...
스크린샷은, middleware 에서 던져준 에러가 아닌 오타로 인한 에러네요