目标
使用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等)