Node.js中有個http的module可以建立http server,使用上也非常的容易
例如:

var server;
var ip   = "127.0.0.1";
var port = 1234;
var http = require("http");

//設定http server,req參數是代表client傳來的要求,res代表server端的動作
server = http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/html'});
        //取得路徑,依照路徑不同回覆client不同的資料
        var path  = req.url;
        switch(path){
                case "/index":
                        res.end("index");
                        break;
                case "/test":
                        res.end("test");
                        break;
                default:
                        res.end('Hello World\n');
        }
        //當透過瀏覽器連接時,path除了顯示瀏覽器連的路徑外,還會顯示/favicon.ico(瀏覽器讀取icon的關係)
        console.log(path);
});

//啟動http server,監聽http行為
server.listen(port, ip);

console.log("Server running at http://" + ip + ":" + port);

執行上述這段程式後,利用瀏覽器就可以連到Node.js產生出來的http server

既然說是http server,讀檔也是必要的,需配合fs module來讀檔

var server;
var ip   = "127.0.0.1";
var port = 1234;
var http = require("http");
var fs = require("fs");
var encode = "utf8";
var dir_path = "view"; //放網頁檔案的目錄

//設定http server
server = http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/html'});
        //取得路徑
        var file_path  = dir_path + req.url;

        fs.readFile(file_path, encode, function(error, data){
                //當fs讀不到檔案或發生錯誤時,error會是true
                if(error){
                        res.writeHead(404, {'Content-Type': 'text/html'});
                        res.end("404 not found");
                        return 0;
                }
                res.writeHead(200, {'Content-Type': 'text/html'});
                res.write(data);
                res.end();
        });
});

//啟動http server,監聽http行為
server.listen(port, ip);

console.log("Server running at http://" + ip + ":" + port);

另外補充一下

res.write()跟res.end()不同的地方在於,res.write()可以不限次數使用,將資料回傳給client;而res.end()也可以將資料回傳給client,但傳完後就結束與client的connect了

Categories: Node.js