청소 플랫폼 만들기 (23)

김민준·2023년 9월 11일
0

청소 플랫폼 만들기 (23)

공부하며 느낀 점
참조한 페이지

청소 플랫폼 만들기 (23)

팀원의 충고

app.js에 app.use('/template', express.static(path.join(__dirname, 'template'))); 이 부분 잘못사용하셨습니다. 코드를 app.use(express.static(path.join(__dirname, 'template')));

라는 팀원의 충고를 받았다.

내가 짠 코드는 /template 경로로 요청이 있을때 template 경로의 파일을 가져오고, 팀원이 제시한 코드는 모든 경로의 요청에서 가져오는듯하다.

그런데 실제로는 아래의 코드를 적용하면 내가 template 안에 만들어둔 .js 파일들의 함수가 작동하지 않았다.
express 사이트를 참조해도 아래와같다.

const path = require('path')
app.use('/static', express.static(path.join(__dirname, 'public')))

아무래도 팀원이 실수한듯하다.

리프레시 토큰 만료시

리프래시 토큰 만료시 강제로 로그아웃 하도록 구현했다.

const permissionCache = require('../cache/permissionCache');

try {
    const decode = jwt.verify(token, cookie_secret);
    return decode;
  } catch (err) {
    if (err.name === 'TokenExpiredError') {
      console.log('엑세스 토큰이 만료되었습니다.');

      const refreshToken = req.cookies.refresh;
      console.log(refreshToken);
      const reToken = refreshToken.split(' ')[1];

      try {
        jwt.verify(reToken, cookie_secret);
        const decode = jwt.decode(token, cookie_secret);
        console.log('리프레시 토큰 검증 성공');

        // 엑세스 토큰생성
        let accessToken = this.makeAccessToken(decode);

        permissionCache.setPermissionCache(decode.userId);

        accessToken = this.bearer(accessToken);

        res.cookie('Authorization', accessToken, { httpOnly: true, sameSite: 'strict' });

        return accessToken;
      } catch (error) {
        console.log;
        const decode = jwt.decode(token, cookie_secret);
        permissionCache.clearCache(decode.userId);
        res.clearCookie('Authorization');
        res.clearCookie('SignIn');
        res.clearCookie('refresh');
        console.error('리프레시 토큰 검증 오류:', error);
      }
    } else {
      console.error('토큰 검증 오류:', err);
    }
  }
  

위와같이 엑세스토큰이 만료되었고, 리프레시 토큰이 살아있다면 엑세스 토큰을 재발급한다.
엑세스 토큰이 만료되었고, 리프레시 토큰역시 죽었다면 캐시와 쿠키를 모두 비워서 강제로 로그아웃시킨다.

모듈화 추가

app.js 파일에 너무 많은 app.get()이 있어서 정신 사납다는 의견이 있어서 이사시켰다.
별도의 파일을 만들고

app.get('/', (req, res) => { res.render('user.html', {}); });

위와같은 형태였다면 아래로 바꾸었다.

//  app.js
const render = require('./middlewares/render');
app.get('/', render.mainPage);

//  ./middlewares/rende.js
exports.mainPage = (req, res) => {
  res.render('user.html', {});
};

처음에는 경로 정보인 '/', 까지 가져갔었는데 {"message":{"status":404}} 404 에러가 떴다. 요청 경로 문제이므로 요청 경로 부분만 따로 떼고, 콜백함수만 가져가니 문제가 사라졌다.

app.use('/template', express.static(path.join(__dirname, 'template'))); 역시 같은 방법을 시도하였지만 실패하였다.
/template 경로로 요청할 때 정적 파일들을 제대로 가져오지 못하는 듯 하다.

공부하며 느낀 점

모듈화도 신경써가면서 해야할 것같다. 실패한 것이긴 하지만 app.use('/template', express.static(path.join(__dirname, 'template'))); 를 모듈화해보려고 했을 때 require 로 가져오는 것들을 전부 별도 파일에 선언해야했다. 가져오기만 하니까 필요 없을줄 알았지...

참조한 사이트

Serving static files in Express

profile
node 개발자

0개의 댓글

관련 채용 정보