해결된 질문
작성
·
197
·
수정됨
0
nodebird-api 미들웨어 index.js 타입이 any로 떠서 프리미엄이 체크가 안되고 계속 제가 작성한 게시글정보만 뜹니다 사용량제한 어떻게 하나요? ㅠㅠ
const jwt = require("jsonwebtoken");
const rateLimit = require("express-rate-limit");
const User = require("../models/user");
exports.isLoggedIn = (req, res, next) => {
if (req.isAuthenticated()) {
next();
} else {
res.status(403).send("로그인 필요");
}
};
exports.isNotLoggedIn = (req, res, next) => {
if (!req.isAuthenticated()) {
next();
} else {
const message = encodeURIComponent("로그인한 상태입니다.");
res.redirect(`/?error=${message}`);
}
};
exports.verifyToken = (req, res, next) => {
try {
res.locals.decoded = jwt.verify(
req.headers.authorization,
process.env.JWT_SECRET
);
return next();
} catch (error) {
if (error.name === "TokenExpiredError") {
return res.status(419).json({
code: 419,
message: "토큰이 만료되었습니다.",
});
}
return res.status(401).json({
code: 401,
message: "유효하지 않은 토큰입니다.",
});
}
};
exports.apiLimiter = rateLimit({
windowMs: 60 * 1000, // 1분
max: 1,
handler(req, res) {
res.status(this.statusCode).json({
code: this.statusCode, // 기본값 429
message: "1분에 한 번만 요청할 수 있습니다.",
});
},
});
exports.apiLimiter = async (req, res, next) => {
let user;
if (res.locals.decoded) {
user = await User.findOne({ where: { id: res.locals.decoded.id } });
}
rateLimit({
widowMs: 60 * 1000,
max: user?.type === "premium" ? 10 : 1,
handler(req, res) {
res.status(this.statusCode).json({
code: this.statusCode,
message: "1분에 열 번만 요청 할 수 있습니다...",
});
},
})(req, res, next);
};
exports.deprecated = (req, res) => {
res.status(410).json({
code: 410,
message: "새로운 버전이 나왔습니다. 새로운 버전을 사용하세요",
});
};
답변 1
0
타입스크립트가 아닌 자바스크립트인데 타입이 any라는게 무슨 말씀이신가요? 타입이 any인 것과 지금 상황은 아무 관련이 없습니다. 프리미엄 체크가 어디서 안 된다는 건가요? 게시글은 어디에 뜬다는 건가요? 질문을 구체적으로 이해가 되게 해주세요.
죄송합니다 선생님 빨리알고싶어서 중구난방으로 질문했습니다 정리해서 질문드리겠습니다