2016-07-25 1 views
3

몇 가지 이유로 node.js에 간단한 응용 프로그램을 작성합니다. "TypeError : 경로가 절대적이어야하며 루트를 res.sendFile으로 지정해야합니다." 내 HTML 페이지를 제공하려고합니다. 이 오류는이 파일을 찾을 수있는 폴더를 지정하는 명시 적 미들웨어를 사용했기 때문에 발생하지 않아야합니다. 그렇다면 왜이 문제가 발생합니까?Node.js 응용 프로그램이 루트 경로없이 정적 웹 페이지를 제공하지 않음

내 응용 프로그램 구조는 내가 "res.sendFile을 할 수있는, 내 HTML 페이지 내가이 문제를 얻을 알이

var express = require("express"); 
var app = express(); 

app.use(express.static("public")); 

app.get('/', function(req, res){ 
    res.sendFile("login.html"); 
}); 

app.listen(3000); 

처럼 app.js에서 제공되는이

MyApp 
    public 
     login.html 
    app.js 

처럼 보인다 (__dirname + '/public/login.html'); " 대신 미들웨어를 사용하고 있기 때문에 그렇게해서는 안됩니다. 어떤 아이디어? 당신에게 전체 경로를 제공

+0

다소 혼란 스럽지만,'sendFile()'에 파일 이름을 줄 때 Node가 "public"폴더를 봐야한다고 생각하십니까? 그렇지 않습니다. 정적 파일 만 직접 액세스 할 때 그 방식으로로드되므로 "정적"이름이됩니다. – adeneo

+0

당신의 OS는 무엇입니까? –

+0

@adeneo 예, login.html이 고정되어 있기 때문에 공용 폴더를 볼 것으로 예상됩니다. – OneMoreQuestion

답변

0

이 줄

app.use(express.static("public")); 

당신이 그것을하지 생각하지 않습니다!

아니요.은 모든 노드 기능에 대한 기본 폴더를 설정합니다. 실제로 다른 노드 기능에 대해서는 아무 것도 수행하지 않습니다.

웹 서버가 요청을 받으면 먼저 해당 폴더가 있는지 확인하고 그 파일이 있는지 확인한 후 해당 파일을 제공하십시오.

따라서 CSS 및 JavaScript 파일에 가장 많이 사용되는 정적 파일 경로와 동적 콘텐츠를 제공하지 않는 다른 정적 파일 경로입니다. 그러나

,

res.sendFile("login.html"); 

는 현재 작업 디렉토리에있는 파일 login.html을 찾습니다, 또는 노드 스크립트가 실행되는 것 즉이 라인, 그것은과는 전혀 아무것도하지 않습니다 그 파일을 찾을 수 sendFile에 필요한 올바른 경로와 같이 고정 경로에 관계없이 스크립트가 실행되는 위치에 해당 파일을 얻을 수 사실에서 올바른 방법은

res.sendFile(__dirname + '/public/login.html'); 

을 정확히입니다.

+0

기다려야합니다 login.html 정적 파일 아닌가요? – OneMoreQuestion

+0

@OneMoreQuestion - 물론 http : // mywebsite/login.html과 같이 접근하면 static ** route **로 가져올 수 있습니다.하지만 sendFile이 갑자기 작동하지 않습니다. 웹 서버 *에 설정된 고정 경로. 요컨대 정적 경로는 Node의 나머지 기능과 아무 상관이 없으며 웹 서버가 정적 파일을 브라우저에만 제공 할 수 있습니다. – adeneo

+0

당신은 "sendFile"이 올바른 접근법이 아니라고 말하고 있습니까? 미들웨어를 사용하고 싶습니다. "렌더링"도 시도했지만 뷰 엔진 렌더링 문제가 발생합니다. 미들웨어를 활용하고 싶다면 더 좋은 방법이 있습니까? – OneMoreQuestion

0

추가 기능은,의이 기능 그리고 $

var $=(file)=>`${__dirname}/public/${file}`; 

에게 전화를하자 그하여

res.sendFile($("login.html")); 

을 각 sendFile 수동 루트 경로를 포함 할 필요가 없습니다 전화.

관련 문제