2013-02-20 1 views
3

아주 간단한 질문이지만 많은 문제가 있습니다.NodeJS URL 요청, 절대 또는 상대?

다음 두 가지 경우의 차이점은 무엇입니까?

index.html 

- script src="script/a.js" 
- script src="/script/a.js" // starting with slash 

내 서버가이 요청을 처리 할 수있는 이유

app.get('/script/a.js', function(req, res){ // with slash 
    res.sendfile(__dirname + '/realfolder/script/a.js'); 
}); 

에 상관없이 클라이언트 측의 URL의 SRC 내가 방금 언급 한 두 각 호의 어느 하나에 해당하는 경우 경우입니다 (슬래시로 시작)? 나는 다음과 같은 방법으로 요청을 처리하는 경우

반면에, 난 항상 404 오류가 발생했습니다

제 생각에는
app.get('script/a.js', function(req, res){ // without slash 
    res.sendfile(__dirname + '/realfolder/script/a.js'); 
}); 

은 경로가 '/'는 루트 폴더를 의미에서 시작 (슬래시없이 시작) 다른 응용 프로그램은 __dirname의 상대 경로를 의미합니다. 그리고 왜 내 서버가 app.get ('script/a.js') 처음에는 슬래시가없는이 요청을 처리 할 수없는 이해할 수 없습니까?

뭐가 잘못 되었나요?

답변

3

경로가 슬래시로 시작하면 /은 절대 경로임을 의미합니다. 슬래시로 시작하지 않으면 상대 경로입니다.

예제를 참조하십시오. 내 하드 디스크는 다음과 같은 폴더가있는 것을 상상해

main 
    subfolder1 
    subfolder2 
     lastfolder 

을 이제 우리는 폴더 subfolder2에 상상 우리는 내부 lastfolder있는 파일을로드 할 수 있습니다. 우리는 상대 경로를로드 할 수

lastfolder/file.txt 

그러나 우리는 또한 절대 경로 사용할 수 있습니다

/main/subfolder2/lastfolder/file.txt 

두 경로가 올바른지,하지만 우리는 이동하는 경우 상대적 하나가 실패 할 수 있습니다 다른 폴더 (예를 들어 우리가 subfolder1 인 경우)로 보내지 만 절대 경로는 항상 정확합니다 (물론 폴더를 수정하지 않으면).

+0

감사합니다. 나는이 개념을 알고 있다고 생각합니다. 하지만 여전히 내 서버가 app.get ('script/a.js') 시작 부분에 스플래시가없는이 요청을 처리 할 수 ​​없다는 것을 이해할 수 없습니까? – Kevin

+0

음, 상대 경로가 작동하지 않을 때 첫 번째 질문은 다음과 같습니다. 'main' 폴더에 있습니까? 'subfolder1' 안에요? 귀하의 경우, 귀하의 노드 애플 리케이션은 어디에서 실행됩니까? 참조 : http://nodejs.org/docs/v0.4.2/api/process.html#process.cwd 또는 절대 경로를 사용하십시오. – TheBronx

+0

한 가지만 확인하십시오. 실패한 상대 경로가 표시되면 서버 측에서 앱 루트 (process.cwd())에서이 파일을 찾으려고합니다. – Kevin

관련 문제