Node.js 的简易web服务器

2011-11-20 03:57

Node.js 的简易web服务器

by Shawphy

at 2011-11-19 19:57:24

original http://shawphy.com/2011/11/a-simple-nodejs-web-server.html

网上关于Node.js的介绍已经铺天盖地了,但我就没找到一个简单的web服务器给我做测试用。
实际上Node.js只需要一个exe文件和一个js文件就可以搭建服务器了,用来随便测试页面之类的用起来比nginx还方便。所以我就随手写了一个简单的。只可用于http服务,没有更多功能的js文件。

用起来很简单:
1,先去 http://nodejs.org/下载最新的Node.js可执行的exe文件。比如: http://nodejs.org/dist/latest/node.exe
2,把下面的代码保存为一个 server.js 文件,把它跟刚才下载到的 node.exe 文件放在一起。
3,把server.js文件拖到node.exe文件上就OK了

就这三步之后,整个目录下的文件都可以通过 http://127.0.0.1:8080/ 来访问了,测试用起来非常方便。

其他系统下也如法炮制,官网上也有下载mac和linux的版本。

  1. var http = require("http"),
  2.     url  = require("url"),
  3.     path = require("path"),
  4.     fs   = require("fs");
  5.  
  6. http.createServer(function (req, res) {
  7.     var pathname=__dirname+url.parse(req.url).pathname;
  8.     if (path.extname(pathname)=="") {
  9.         pathname+="/";
  10.     }
  11.     if (pathname.charAt(pathname.length-1)=="/"){
  12.         pathname+="index.html";
  13.     }
  14.  
  15.     path.exists(pathname,function(exists){
  16.         if(exists){
  17.             switch(path.extname(pathname)){
  18.                 case ".html":
  19.                     res.writeHead(200, {"Content-Type": "text/html"});
  20.                     break;
  21.                 case ".js":
  22.                     res.writeHead(200, {"Content-Type": "text/javascript"});
  23.                     break;
  24.                 case ".css":
  25.                     res.writeHead(200, {"Content-Type": "text/css"});
  26.                     break;
  27.                 case ".gif":
  28.                     res.writeHead(200, {"Content-Type": "image/gif"});
  29.                     break;
  30.                 case ".jpg":
  31.                     res.writeHead(200, {"Content-Type": "image/jpeg"});
  32.                     break;
  33.                 case ".png":
  34.                     res.writeHead(200, {"Content-Type": "image/png"});
  35.                     break;
  36.                 default:
  37.                     res.writeHead(200, {"Content-Type": "application/octet-stream"});
  38.             }
  39.  
  40.             fs.readFile(pathname,function (err,data){
  41.                 res.end(data);
  42.             });
  43.         } else {
  44.             res.writeHead(404, {"Content-Type": "text/html"});
  45.             res.end("<h1>404 Not Found</h1>");
  46.         }
  47.     });
  48.  
  49. }).listen(8080, "127.0.0.1");
  50.  
  51. console.log("Server running at http://127.0.0.1:8080/");