目标:使用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:8080 http.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等)