1. 程式人生 > >node.js初識07

node.js初識07

pan 之前 creat list readfile utf8 自帶 目錄 text

之前有說過,nodejs是 沒有web容器的,阿帕奇是自帶的web容器,如果希望node達到阿帕奇的效果,即http://127.0.0.1:3000/a/b/c.html 出現這樣的鏈接訪問頁面,所以需要編程以達到這個效果

文件目錄如下,只需要看static.js和static這個文件夾就好了

技術分享圖片

static.js

var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");

http.createServer(function(req,res){
     var pathname= url.parse(req.url).pathname;
     if(pathname=="/"){
         pathname="index.html";
     }
     //拓展名
     var extname = path.extname(pathname);
     fs.readFile("./static/"+pathname,function(err,data){
         if (err) {
             //如果此文件不存在可以返回一個404頁面
             fs.readFile("./static/404.html",function(err,data){
                 res.writeHead(404,{"Content-type":"text/html;charset=UTF8"});
                 res.end(data);
             })
             return;
         };
         //MIME類型,就是
         //網頁文件:text/html
         //jpg文件: image/jpg
         var mime = getMine(extname);
         res.writeHead(200,{"Content-type":mime});
         res.end(data);
     });

 }).listen(3000,"127.0.0.1");
//如果還有不同格式拓展名,可以繼續case下去,
function getMine(extname){
    switch(extname){
        case ".html" :
            return "text/html";
            break;
        case ".jpg" :
            return "image/jpg";
            break;
        case ".png" :
            return "image/png";
            break;
        case ".css" :
            return "text/css";
            break;
    }
}

getMine的目的就是因為在一些老牌的瀏覽器中如果沒有MIME文件類型,即Content-type,瀏覽器就不會識別並加載他
技術分享圖片

至此,在node中,基本的web容器就編寫完了

node.js初識07