2013-07-30 82 views
1

我有以下代碼使用node.js服務靜態/ college.html網頁 但它遇到了錯誤,並顯示在瀏覽器「內部服務器錯誤:無法讀取文件」這是打印在測試代碼中的行。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

最有可能是權限問題。嘗試修復文件的權限。或者以root身份運行節點

爲什麼不使用Express框架,它爲您處理靜態文件夾。

不管怎麼說,你應該使用NginX來以可擴展的方式處理靜態文件。