2016-11-30 7 views
0

나는 index.html을 렌더링하려고하는데 올바른 경로에서도 오류가 발생한다. 나는 그것이 작동 후Node.js - res.sendFile - 오류 : ENOENT가 올바르다. 경로가 정확하다.

res.sendfile('./public/views/index.html'); 

를 사용하지만, 내가 sendfile을가되지 않습니다라는 경고가 표시 내가 sendfile을를 사용하는 경우

//folders tree 
test/server.js 
test/app/routes.js 
test/public/views/index.html 

//routes.js  
app.get('*', function(req, res) { 
    res.sendFile('views/index.html'); 
}); 


//server.js 
app.use(express.static(__dirname + '/public')); 
require('./app/routes')(app); 

는 또한
res.sendFile(__dirname + '/public/views/index.html'); 

을 시도했다.

var options = { 
    root: __dirname + '/public/views/', 
}; 

res.sendFile('index.html', options, function (err) { 
    if (err) { 
     console.log(err); 
     res.status(err.status).end(); 
    } 
    else { 
     console.log('Sent:', fileName); 
    } 
    }); 
+1

당신은 당신이'sendFile'에 넣는 경로를'console.log'할까요? 당신이 기대하는 길을 얻었습니까? – Aurora0001

+0

그것은 나에게 '/Users/me/Desktop/test/app/public/views/index.html'경로를 제공하고 정확한 경로로되어 있습니다. – Alex

+0

** 완전한 ** 오류 메시지를 포함 할 수 있습니까? 경로가 정확하지만 여전히 작동하지 않는 것은 이상한 것처럼 보입니다. – Aurora0001

답변

2

를 추가해보십시오 :

var path = require('path'); 
var filePath = "./public/views/index.html" 
var resolvedPath = path.resolve(filePath); 
console.log(resolvedPath); 
return res.sendFile(resolvedPath); 

이 파일 경로 당신이 코드 아래에 시도 할 수는

+0

이 하나의 일을, 지금은 경로가 올바르지 않다는 것을 볼 폴더를 공개 대신 폴더 애플 리케이션에서 폴더보기를 찾고 있었다. 도움을 위해 모두에게 감사;) – Alex

0

나를 위해 그것을 행한 루트 옵션을 사용해보십시오 정적 파일 (정적 파일 미들웨어는 실제로 아무것도하지 않습니다.) 따라서 경로에서 res.sendFile 무언가를 원한다면 절대 경로를 지정해야합니다. 또는 app.get('*', ...) 라우트를 제거하고 특급 미들웨어가 작동하도록 할 수 있습니다.

+0

{오류 : ENOENT : 해당 파일이나 디렉토리가 없습니다. '/ Users/me/Desktop/test/app/public/views/index. html ' 오류시 (기본) errno : -2, 코드 :'ENOENT ', syscall :'stat ', 경로 :'/Users/me/Desktop/test/app/public/views/index.html ', 노출 : 거짓, statusCode : 404, 상태 : 404} – Alex

+0

거기에 파일이 있습니까? – xShirase

0

문제는 당신이 정적 파일 미들웨어를 정의한 것입니다,하지만 당신은 역할을 처리하려고 그 앞에 경로를 정의

+0

'res.sendFile'는 API docs에 따라 항상 절대 경로를 취합니다 : "옵션 옵션 개체에 루트 옵션이 설정되어 있지 않으면 경로는 파일의 절대 경로 여야합니다." – xShirase

+0

OK 답을 수정 하겠지만, 가장 중요한 점은 처음에 res.sendFile을 사용할 필요가 없다는 것입니다. 정의 된 미들웨어가 작업을 수행 할 수 있도록 경로를 제거해야합니다. – Kevin

+0

예, 동의했습니다. 그 – xShirase

0

것으로 예상 무엇인지 정리한다

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.engine('html', require('ejs').renderFile); 
app.set('view engine', 'html'); 
app.use(express.static(path.join(__dirname, 'public/views'))); 

핸들 API 호출

app.use('/', function(req, res, next) { 
    console.log('req is -> %s', req.url); 
    if (req.url == '/dashboard') { 
     console.log('redirecting to -> %s', req.url); 
     res.render('dashboard'); 
    } else { 
     res.render('index'); 
    } 

});