본문 바로가기
웹개발/기타

Node.js,Redis : TypeError: Invalid argument type 에러 고치기

by JaeminRyu 2023. 5. 12.
728x90

SessionStore를 Mysql에서 Redis로 변경 하던 중 나타났던 오류와 해결 방법에 대해서 서술하려 한다.

이번에 redis 모듈이 업데이트 되면서 몇가지가 바뀌었는데 다른 블로그들에 이러한 내용을 찾기가 어려워서 직접 정리했다.

 

1.레거시 모드 사용하지 않기

 

//기존 코드 (오류남)
const redis = require("redis")
const redisdb = redis.createClient({legacymode: true})

기존에 redis-connect 모듈을 사용하려면 위처럼 legacymode를 true로 변경해줘야 했다.

그러나 업데이트 이후 지원하지 않으므로 

//신규 코드 (오류 안 남)
const redis = require("redis")
const redisdb = redis.createClient()

코드를 이렇게 변경해주면 잘 작동한다.

 

2.RedisStore 사용법

이건 공식 npm redis-connect 홈페이지에도 나와있는 내용이다.

RedisStore = require("connect-redis")(session) //기존 코드 : 작동 안함

RedisStore = require("connect-redis").defaul //신규 코드 : 오류 안 나고 잘 작동함

기존에는 require("connect-redis")(session) 과 같은 방식으로 사용하라고 나와있었는데 업데이트 되면서 위에 처럼 코드를 짜면 된다.

const sessionStore = new RedisStore({client: redisdb})

app.use(session({
  store: sessionStore,
  secret: "시크릿",    
  resave: false,
  saveUninitialized: false,
  cookie: {secure: false} 
}));

그다음에 이렇게 적절히 설정해주고 store에 넣어주면 된다.