2013-01-09 89 views
-2

我想創建一個簡單而安全的HTTP Web服務器。基本HTTP服務器

我用在這個問題上找到的例子「Basic static file server in NodeJS」和更新/改變了一些地方在這裏和那裏。

下面的代碼:

var http = require('http'), 
    url = require('url'), 
    fs = require('fs'); 

function error404(res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.write('404 Not Found\n'); 
    res.end(); 
} 

http.createServer(function(req, res) { 
    var path = url.parse(req.url).pathname.toLowerCase().split('/'); 
    var file = path[path.length - 1] 
    var filename = file.split('.'); 
    var extension = filename[filename.length - 1]; 
    if(extension === 'html') { 
     fs.exists('./client/' + file, function(exists) { 
      if(!exists) { error404(res); } 
      else { 
       res.writeHead(200, {'Content-Type': 'text/html'}); 
       var fileStream = fs.createReadStream('./client/' + file); 
       fileStream.pipe(res); 
       return; 
      } 
     }); 
    } 
    else if(extension === 'js') { 
     fs.exists('./client/js/' + file, function(exists) { 
      if(!exists) { error404(res); } 
      else { 
       res.writeHead(200, {'Content-Type': 'text/javascript'}); 
       var fileStream = fs.createReadStream('./client/js/' + file); 
       fileStream.pipe(res); 
       return; 
      } 
     }); 
    } 
    else if(extension === 'css') { 
     fs.exists('./client/css/' + file, function(exists) { 
      if(!exists) { error404(res); } 
      else { 
       res.writeHead(200, {'Content-Type': 'text/css'}); 
       var fileStream = fs.createReadStream('./client/css/' + file); 
       fileStream.pipe(res); 
       return; 
      } 
     }); 
    } 
    else { error404(res); } 
}).listen(8080); 

現在我有三個問題:

  • 1)請問這段代碼創建一個安全的服務器和可靠嗎?
  • 2)有什麼可以改進的?
  • 3)使用Express.js與「連接」相結合的優點是什麼?

非常感謝你提前!

(信息:我指望使用此代碼後有「把手」,「Socket.io」和「貓鼬/ MongoDB的」組合。)

+1

你應該去那裏http://codereview.stackexchange.com/並在那裏發表你的問題。 –

+0

我知道codereview,但似乎沒有很多人在該站點上使用node.js(33個線程使用該標記)。 –

+1

那麼...如果你想要一個安全和簡單的網絡服務器,使用lighttpd。 ;)它的評估和修改要比你的實現要好得多。 –

回答

-3

你絕對應該只使用快遞。

否則,你會浪費你很多時間重新發明輪子。

+0

問題的第三部分的字面意思是「3)與」Connect「相結合使用Express.js的優點是什麼?」如果你不希望使用快遞的理由(例如,不浪費時間),那麼你不應該問。 – hunterloftis

+0

你沒有給出任何理由。您只是告訴我切換到Express而不提供任何功能比較。我想知道我使用的是什麼,只是使用Express,我不知道代碼庫的含義,並且比我實際需要的功能多得多,這並不值得。 –

+0

解決方案已經存在的事實是一回事,但我已經知道它,所以這意味着我的問題背後有更深的原因。我問這個問題的原因是因爲我試圖自己構建一個服務器來理解代碼庫,而不是盲目地複製/粘貼我沒有的東西。使用庫和框架是非常好的,但是有一點你會堆積如此多的技術,你不瞭解內部工作原理,如果出現問題,你不會有最明顯的想法。 –