標籤:
目標:使用Node.js搭建簡單伺服器提供簡單介面,達到兩數字加減乘除計算並返回json結果。(通用GET/POST)
知識點
- 擷取GET資料
- 擷取POST資料
- 瞭解監聽事件
實現
var http = require("http"); //提供web服務 var url = require("url"); //解析GET請求 var query = require("querystring"); //解析POST請求//服務var server = function(request,response){ //定義報文頭 response.writeHead(200,{"Content-Type":"text/json"}); //判斷是GET/POST請求 if(request.method == "GET"){ var params = []; params = url.parse(request.url,true).query; params[‘fruit‘] = compute(params); response.write(JSON.stringify(params)); response.end(); }else{ var postdata = ""; request.addListener("data",function(postchunk){ postdata += postchunk; }) //POST結束輸出結果 request.addListener("end",function(){ var params = query.parse(postdata); params[‘fruit‘] = compute(params); response.write(JSON.stringify(params)); response.end(); }) }}//計算var compute = function(params){ switch(params[‘type‘]){ case "add": return parseFloat(params[‘num‘]) + parseFloat(params[‘num1‘]);break; case "subtract": return parseFloat(params[‘num‘]) - parseFloat(params[‘num1‘]);break; case "multiplication": return parseFloat(params[‘num‘]) * parseFloat(params[‘num1‘]);break; case "division": return parseFloat(params[‘num‘]) / parseFloat(params[‘num1‘]);break; }}//開啟服務在127.0.0.1:8080http.createServer(server).listen(8080); console.log("Server start!");
值得注意的是由於POST品質過大,所以不能像GET請求那樣直接拿去資料。需要增加監聽事件,並且在POST結束前都不能結束應答(response)完成報文流,所以要把輸出、結束放到監聽結束事件裡。
測試
GET:http://127.0.0.1:8080/?num=32&num1=13&type=add
//print {"num":"32","num1":"13","type":"add","fruit":45}
POST:
我測試POST使用的是chrome外掛程式postman,當然它一樣可是測試GET請求。它包含所有請求類型(delete、put、copy、patch、lock等)
Node.js擷取GET/POST資料