기존 프로젝트를 TS로 바꾸는 과정에서 req 파라미터의 타입을 Request로 줬다
//- middlewares/auth.ts
export const authMiddleware = async (
req: Request,
res: Response,
next: NextFunction
)
문제는 해당 타입에는 내 마음대로 추가를 할 수 없었다
이전에는 쿠키를 req.user = user; 이렇게 저장해두었는데 이게 불가능해졌다
//- middlewares/auth.ts
(req as any).user = user;
일단 꼼수로 이렇게 적어보았다
당연히 문제가 생겼는데 미들웨어 타입인 RequestHandler와 오버로드가 일치하지 않는다는 내용이였다
'(req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>' 형식은 'RequestHandler<ParamsDictionary, any, any, ParsedQs, Record<string, any>>' 형식에 할당할 수 없습니다
그럼 차라리 새로운 타입을 만들어 넣자! 라고 생각해서 AuthRequest 타입을 만들었다
//- middlewares/auth.ts
interface AuthRequest extends Request {
user?: User;
}
만들고 생각해보니 리퀘스트를 여기서만 쓸게 아니여서 Util폴더에 따로 빼두었다
//- util/authRequest.ts
export interface AuthRequest extends Request {
user?: Users;
}
또 하나 문제가 생겼는데...
middlewares/auth.ts에서 req.cookies 를 읽어오지 못 했다..
//- middlewares/auth.ts
const { authorization } = req.cookies;
if (!authorization) {
next(new Error("로그인 후 이용 가능합니다."));
return;
}
Request를 그냥 쓸때는 해당 오류가 없었는데 왜 새로 타입을 만드니 오류가 나지??
미들웨어에서 불러온 Request를 뒤적거려봤다
아니 분명히 cookies가 존재하는데 왜 그걸 복사해온 authRequest는 안되는거지?

util에서 불러온 Request의 원본을 찾아가보았다

어라...쿠키가 존재하지 않음...?
혹시나 하고 express에서 Request를 직접 호출해서 가져왔다

오...
그러니까 나는 다른 Request를 가져와놓고 불평하고 있었다..
express의 Request를 가져오니까 미들웨어의 코드들도 멀쩡해졌다..