2013-07-12 4 views
1

Express Node.js 애플리케이션이 있습니다. 구조는 다음과 같다 :Express.js에서 response.sendfile을 사용할 때 404 오류가 발생했습니다.

myapp 
    +-- node_modules 
    +-- public 
     |-- htmls 
       |-- myhtml.html 
    +-- routes 
     |-- index.js 
    |-- app.js 

app.js은 다음과 같다 :

var express = require('express') 
    , routes = require('./routes') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path'); 

var app = express(); 

// all environments 
// some stuff... 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use('/public', express.static(path.join(__dirname, 'public'))); 

app.get('/', routes.index); 
app.get('/content/:file', routes.plainhtml); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

routes/index.js은 다음과 같다 :

// Some stuff... 
exports.plainhtml = function(req, res) { 
    res.sendfile('/public/htmls/' + req.params.file); 
}; 

내 브라우저를 열고 다음 주소를 얻으려고 : http://localhost:3000/content/myhtml.html 및 404 오류가 발생합니다.

Express 404 Error: ENOENT, stat '/public/htmls/myhtml.html'

라우팅이 완료되고 함수가 호출됩니다. 문제는 res.sendfile을 사용하려고 할 때입니다. 어떤 주소가 거기를 통과해야합니까 ???

어떻게해야합니까?

+1

'public/htmls /'을 사용해 보셨습니까? – mak

+0

작동합니다 ...하지만 public/public을 사용하는 app.js에 규칙을 추가했습니다 ... mak은 Expression/Node.js에서 라우팅이 수행되는 방법을 설명하는 답변을 게시 하시겠습니까? 그리고 여기 누가 길 찾기를 처리하고 있습니까? 노드, js 또는 익스프레스? 감사합니다 – Andry

답변

6

특급 앱은 입니다.

sendfilepath 매개 변수는 상대 경로입니다. 당신이 res.sendfile('xxx.js')을 할 때, 표현은 app.js가에있는 것과 같은 디렉토리에 xxx.js 찾습니다.

슬래시 /path 시작 그것은 파일 시스템의 절대 경로, 예를 들어 것을 의미하는 경우 /tmp.

당신이 상대 경로를 사용하는 경우도 루트 경로를 지정할 수 있습니다

res.sendfile('passwd', { root: '/etc/' }); 

docs를 참조하십시오.

+0

Thankyou mak, 정말 도움이되었습니다. – Andry

+0

사용자가 존재하지 않는 : file 매개 변수를 사용하여 요청할 때 원하지 않는 서버 정보를 누설하는 페이지에 ENOENT : 를 계속 인쇄합니다. –

+0

그런 다음 파일이 존재하는지 확인하십시오. – mak

관련 문제