Web App Project

node 폴더 경로[ 상대/절대경로 비교]['__dirname'을 꼭 사용하자]

하얀성 2024. 1. 9. 13:03

상대경로 / 절대 경로

-예시-

pp.set('view engine', 'ejs')
app.set('views', './views')

app.use(bodyParser.urlencoded({ extended: false}))
app.use(express.static(__dirname+'./public'))

 

Node.js에서 파일 경로를 지정할 때 ./ /의 차이는 상대 경로와 절대 경로를 나타냅니다. __dirname을 사용할 때에는 주의가 필요합니다. __dirname은 항상 현재 파일의 절대 경로를 나타내므로 이를 사용할 때에는 경로 앞에 ./를 붙일 필요가 없습니다.

 

⚠️상대 경로의 .(점)은 파일이 실행중인 폴더를 말한다.(npm start 하는 그곳.)

 

  • app.set('views', './views'): 여기서 './views'는 현재 작업 디렉토리에 상대적인 경로를 의미합니다. 즉, Node.js 프로세스가 실행되는 위치에 따라서 views 디렉토리를 찾습니다. 이 코드는 일반적으로 앱의 시작 스크립트가 views 폴더와 같은 위치에 있을 때 잘 동작합니다.
  • app.use(express.static(__dirname+'/public')): 여기서 __dirname은 현재 실행 중인 스크립트 파일의 절대 경로를 반환합니다. 따라서 __dirname 뒤에 오는 /public은 절대 경로에 상대적인 경로를 추가하는 것입니다. __dirname+'/public'는 항상 public 디렉토리의 절대 경로를 나타냅니다. 여기서 ./를 사용하는 것은 실수이며, 이는 경로 문자열에 불필요한 점을 추가하는 것이 됩니다.

node.js 서버관련 파일구조

 

app.use(express.static('/public'))

static 미들웨어를 사용하여 정적 파일을 서비스할 수 있음.

하지만 아래처럼 절대경로 설정이 필요.

 


app.use(express.static(__dirname+'/public'))

이 코드를 통해서 어느 폴더를 기준으로 할것인지를 정할 수 있다.

ㅡ> 

이 설정으로, 웹 서버의 루트 URL (/)에서 시작하는 모든 요청은 public 폴더 내부에서 파일을 찾게 됩니다.

 

하지만 절대 경로(__dirname)를 붙여주지 않으면 예상치 못한 오류가 발생할 수 있다.

 


실습

1. 이미지 경로 찾기 성공 

ㅡ> / 라는 경로가 절대 경로가 됨

<%-include('header.ejs')%>

  홈페이지에 오신것을 환영합니다.

  <img src="/a.jpg" />

  <%-include('footer.ejs')%>

2. 이미지 경로 찾기 실패.

 

<%-include('header.ejs')%>

  홈페이지에 오신것을 환영합니다.

  <img src="../a.jpg" />

  <%-include('footer.ejs')%>