2013-01-09 67 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

解决方案已经存在的事实是一回事,但我已经知道它,所以这意味着我的问题背后有更深的原因。我问这个问题的原因是因为我试图自己构建一个服务器来理解代码库,而不是盲目地复制/粘贴我没有的东西。使用库和框架是非常好的,但是有一点你会堆积如此多的技术,你不了解内部工作原理,如果出现问题,你不会有最明显的想法。 –