搭建一個簡單的服務器
通過下面的代碼可以搭建一個簡單的服務器:
var http = require("http"); http.createServer(function(request,response){ response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello my first demo"); response.end(); }).listen("8080"); console.log("server start");
搭建一個簡單的服務器需要依賴http模塊,通過http.createServer()來生成一個服務器實例通過listen()來啟動這個實例。
http.createServer()參數是一個函數,這個函數的兩個參數分別為request和response,request記錄着從前端到服務器的各種信息,response記錄從服務器端到前端的各種信息。
request有三個重要的屬性:request.url:表示請求的地址,request.method:表示請求的方式,request.headers:表示所有的請求頭信息。
另外我們可以通過request.setEncoding()來設置請求的編碼。
我們也可以通過on()來為request的事件來注冊處理函數,request.on()有兩個事件分別為data和end,data表示正在接收數據,end表示數據接收完成,我們從前台向服務器發送數據常用的方式就是get和post,對於get請求我們可以直接從url中提取出傳輸的數據,而post的數據一般是放在請求體中的此時我們就需要data這個事件來獲取前台的發送數據,使用方式為:
var postData = ""; request.on("data",function(data){ postData +=data; }); request.on("end",function(){ console.log(postData); });
在開始的例子中response.writeHead用來設置http返回的頭信息,write()的參數表示要寫入的內容,end()用來將write()的內容寫入到response對象中。
listen()函數表示啟動當前的http實例,listen()函數可以接收兩個參數,第一個參數表示要監聽的端口,第二個參數表示要監聽的地址,也就是只有請求地址符合listen()的設置,http.createServer()里面的函數才會執行,listen()的默認地址為localhost。
處理不同的請求
上面的例子對於所有的請求執行的操作都是一樣的,在實際開發中這個情況是不存在,我們需要針對不同的URL來做不同的處理,此時我們就需要對request對象的url屬性進行判斷了:
var http = require("http"); var demo = http.createServer(function(request,response){ var path = request.url; console.log(path); switch(path){ case "/homepage": response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello this is homepage"); response.end(); break; case "/details": response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello this is details"); response.end(); break; default: response.writeHead(404,{"Content-Type":"text/plain"}); response.write("sorry"); response.end(); break; } }).listen("8080"); console.log("server start");
返回一個html頁面
上面的這些我們只是返回幾個字而已,正常情況下我們返回的通常是一個完整的頁面,如果我們在response.write()中拼一個html頁面出來,就會很麻煩而且很容易出錯,此時我們就可以利用fs模塊來簡化這個操作:
var http = require("http"); var fs = require("fs"); var demo = http.createServer(function(request,response){ var path = request.url; if(path=="/register"){ fs.readFile("register.html",function(err,data){ response.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}); response.write(data); response.end(); }); }else{ response.writeHead(200,{"Content-Type":"text/plain"}); response.write("hello node"); response.end(); } }).listen("8080"); console.log("server start");
