728x90
Chat GPT는 어떻게 활용하느냐에 따라 옳은 정보를 주기도 하고, 되려 더 돌아가는 정보를 주기도 하는 듯 하다.
오늘 chat GPT의 덕을 톡톡히 봤는데,
그 중에 하나가 바로 express.static()를 동적으로 활용하는 방법이다.
처음 가이드 해 준 방법
Q. nodejs 에서 이벤트가 발생했을 때 express static path를 바꾸고싶은데 방법이 있을까?
// 기본 정적 경로 설정
app.use(express.static(path.join(__dirname, 'public')));
// 이벤트 발생 시 정적 경로 변경
function changeStaticPath(newPath: string) {
app._router.stack.forEach((middleware) => {
if (middleware.name === 'serveStatic') {
middleware.handle = express.static(newPath);
}
});
}
app._router.stack에 여러 Router 레이어가 있다는 걸 이 때 알았다.
원하는 라우터를 골라서 수정 가능하다는 것을 알게됨.
과연 이게 안정적인 방법일 수 있는지는 아직 모르겠다.
그런데, 경로 변경은 적용이 안 됨.
그래서 다시 물어봤다.
두 번째 가이드 해 준 방법
Q. 경로가 안 바뀌는데ㅜ
// 기본 정적 경로 설정
app.use(express.static(path.join(__dirname, 'public')));
// 이벤트 발생 시 경로 변경
function changeStaticPath(newPath: string) {
// 새로운 Express 애플리케이션 생성
const newApp = express();
newApp.use(express.static(newPath));
// 기존 애플리케이션 미들웨어를 새로운 애플리케이션으로 복사
app._router.stack.forEach((middleware) => {
newApp.use(middleware);
});
// 기존 애플리케이션을 새로운 애플리케이션으로 교체
app = newApp;
}
app을 초기화해서 다시 설정한다고..?
뭔가 너무 거창한 과정이 더해진 것 같다.
더 심플한 방법이 없는지 다시물어본다.
세 번째 가이드 해 준 방법(It works!)
Q. 다른 설정값은 다 유지하고 정적경로만 변경하고싶어.
// 기본 정적 경로 설정
app.use(express.static(path.join(__dirname, 'public')));
// 이벤트 발생 시 경로 변경
function changeStaticPath(newPath) {
app._router.stack.forEach((middleware) => {
if (middleware.name === 'serveStatic') {
middleware.handle = express.static(newPath);
middleware.handle.root = newPath; // <=== 여기가 핵심이었다.
}
});
}
결국 핵심은 middleware.handle.root 값에 새로운 경로를 할당해주는 것이었다.
구글링보다 백만배는 더 나은 chat GPT,,,
내 시간 세이브 해주어서 땡큐!
728x90
728x90
'기술공부 > 언어' 카테고리의 다른 글
[Node.js] 왜 pg 라이브러리에서 bigint를 string으로 인식할까? (0) | 2024.08.26 |
---|---|
[Node.js] jsonpath 패키지 사용 시 pkg build Error (Error: Cannot find module 'esprima' Require stack:- aesprim) 발생 해결 방법 (0) | 2024.06.25 |
[javascript] Object array 에서 특정 key-value를 만족하는 feature만 추출하기 (0) | 2023.03.03 |
[JavaScript] Array 중복 제거 (0) | 2023.02.21 |
[C#] 라이브러리 만들어보기 - enum(열거형) (0) | 2022.04.26 |