2013-07-30 3 views
1

static/college.html 에서 웹 페이지를 제공하기 위해 node.js를 사용하는 다음 코드가 있습니다.하지만 오류가 발생하여 브라우저에 "내부 서버 오류 : 파일을 읽을 수 없습니다" 테스트를 위해 코드에 인쇄 된 선입니다.node.js의 내부 서버 오류

제안 사항 및 해결 방법은 무엇인가요? 감사합니다.

// Require the functionality we need to use: 
var http = require('http'), 
     url = require('url'), 
     path = require('path'), 
     mime = require('mime'), 
     path = require('path'), 
     fs = require('fs'); 

// Make a simple fileserver for all of our static content. 
// Everything underneath <STATIC DIRECTORY NAME> will be served. 
var app = http.createServer(function(req, resp){ 
     var filename = path.join(__dirname, "static", url.parse(req.url).pathname); 
     (fs.exists || path.exists)(filename, function(exists){ 
       if (exists) { 
         fs.readFile(filename, function(err, data){ 
           if (err) { 
             // File exists but is not readable (permissions issue?) 
             resp.writeHead(500, { 
               "Content-Type": "text/plain" 
             }); 
             resp.write("Internal server error: could not read file"); 
             resp.end(); 
             return; 
           } 

           // File exists and is readable 
           var mimetype = mime.lookup(filename); 
           resp.writeHead(200, { 
             "Content-Type": mimetype 
           }); 
           resp.write(data); 
           resp.end(); 
           return; 
         }); 
       }else{ 
         // File does not exist 
         resp.writeHead(404, { 
           "Content-Type": "text/plain" 
         }); 
         resp.write("Requested file not found: "+filename); 
         resp.end(); 
         return; 
       } 
     }); 
}); 
app.listen(3456); 

지금까지 의견을 보내 주셔서 감사합니다. 그냥이 줄을 인쇄합니다 url.parse(req.url).pathname하지만 비어있는 것으로 표시됩니다. 거기에 무슨 문제가있을 수 있습니까?

+0

'resp.write ("내부 서버 오류 : 파일을 읽을 수 없습니다");'위의'console.log ("파일을 읽을 수 없습니다"+ err)'를 추가 한 다음 콘솔을보고 더 자세한 정보를보십시오 뭐가 잘못 됐어. – adpalumbo

+0

다음과 같습니다 : 오류 : EISDIR, 디렉토리에서의 잘못된 연산 – user2514364

+0

디렉토리에서'readFile'을 호출하는 것처럼 보입니다. 내 생각에'url.parse (req.url) .pathname'는 예상했던 것, 아마도 빈 문자열을 반환하지 않는다는 것입니다. 'console.log'를 사용하여 빌드 한 직후'filename'을 출력 해보십시오. 그것이 당신이 기대하는 것임을 확인하십시오. – adpalumbo

답변

3

파일 이름을 확인하십시오. 디렉토리 또는 null 또는 사용 권한 문제가 아닌지 확인하십시오. 프록시를 추가하여 HTTP 매개 변수를 추적하십시오. 그리고 phantomjs와 함께 실행하고 컬로 사이트를 누르십시오.

단위 테스트 추가

0

대부분 사용 권한 문제입니다. 파일에 대한 사용 권한을 수정하십시오. 또는 루트로 노드를 실행하십시오.

왜 익스프레스 프레임 워크를 사용하지 않더라도 정적 폴더를 처리합니다.

마찬가지로 NginX를 사용하여 확장 가능 방식으로 정적 파일을 처리해야합니다.