Express Request 새로운 object 확장
서론
Express를 활용하여 server 프로그램을 만들다보면 세션관리와 같은 일에서 미드웨어로 처리하고 Request에 새로운 Object값을 추가로 넣어줘야하는 경우가 발생합니다.
방법
Express를 활용하여 server 프로그램을 만들다보면 세션관리와 같은 일에서 미드웨어로 처리하고 Request에 새로운 Object값을 추가로 넣어줘야하는 경우가 발생합니다.
아래의 방법을 순차적으로 따른다.
src/entity/<interface_name.ts> 파일 생성
전달하고자하는 자료형을 미리 정의해준다.
(경로는 자유롭게 해도 상관없지만 위의 경로를 추천한다.)
interface로 선언, type로 선언하게 되면 Request에 전달할수가 없습니다.
export interface Member {
uno?: number; uid?:string; uname? : string;
unick?:string, camp_style?:string;
profile_img?: string;
}
src/@types/<type_file_name.ts> 파일을 추가
Express안에 Request interface안에 있는 member의 자료형을 위에서 만든 Member라는 interface로 고정시켜 줍니다. 그래야 member라는 자료형에 접근하였을때 자료형에 관련된 에러메세지가 발생하지 않습니다.
export {}를 왜 넣어줘야하는지 이해가 되지 않는다. 저것 때문에 자료형을 바로 불러오고있다(import('../entity/Meber').Member).
type_file_name.ts
export {}
declare global{
namespace Express{
interface Request{
member : import('../entity/Meber').Member;
}
}
}
Middleware에서 object에 넣어주기
이제 미들웨어에서 사용하여 추가하면 된다. 쿼리로부터 id를 받아오고 그 정보를 토대로 member를 만들어서 req에 추가 하면된다.
src/middleware/<middleware_name.ts>
middleware_name.ts
import { NextFunction, Request, Response } from "express";
import {Member} from "../model/data/member/Member";
const middleware = async(eq: Request, res: Response, next: NextFunction) => {
const {id} = req.query;
if(!uid) return next();
const userInfo = await Member.findOne({where : {uid}, paranoid:false});
req.member = {uno : userInfo?.uno, ..... }
return next();
}
req.new_object사용하기
middleware를 express에 추가하고 나면 아래와 같이 해당 object에 접근이 가능하다.
예제에서는 member이다.
async func_namereq: Request, res: Response, next: NextFunction) {
const {uno} = req.member;
//todo
*........
//
}
Author And Source
이 문제에 관하여(Express Request 새로운 object 확장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@divan/Express-Request-새로운-object-확장저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)