Node.js获取GET/POST数据

目标:使用Node.js搭建简单服务器提供简单接口,达到两数字加减乘除计算并返回json结果。(通用GET/POST)

知识点

  1. 获取GET数据
  2. 获取POST数据
  3. 了解监听事件

实现

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等)

时间: 2024-11-15 20:32:31

Node.js获取GET/POST数据的相关文章

Node.js处理I/O数据之Buffer模块缓冲数据

一.前传 在之前做web时也经常用到js对象转json和json转js对象.既然是Node.js处理I/O数据,也把这个记下来. Json转Js对象:JSON.parse(jsonstr); //可以将json字符串转换成json对象 Js对象转Json:JSON.stringify(jsonobj); //可以将json对象转换成json对符串 var jsonStr='{"name":"cuiyanwei","sex":"男&quo

node.js获取cookie

node.js 获取cookie var Cookies ={}; if (req.headers.cookie != null) { req.headers.cookie.split(';').forEach(l => { var parts = l.split('='); Cookies[parts[0].trim()] = (parts[1] || '').trim(); }); }

用node.js(socket.io)实现数据实时推送

在做商品拍卖的时候,要求在商品的拍卖页面需要实时的更新当前商品的最高价格.实现的方式有很多,比如: 1.setInterval每隔n秒去异步拉取数据(缺点:更新不够实时) 2. AJAX轮询方式方式推送数据(缺点:服务端需要在死循环中反复查询数据库) 3.websocket推送数据(缺点:仅支持html5标准的浏览器) socket.io的简要介绍 所有客户端都通过socket.io挂在nodejs服务器上(注意: 只是挂着,不需要任何循环,因为它是事件驱动的):需要推送消息了,服务器就与nod

node.js获取url中的各个参数

实例代码test.js var http=require('http'); var url=require('url'); var querystring=require('querystring'); http.createServer(function(request, response) { var urlStr = request.url; var methodName = urlStr.substring(1, urlStr.indexOf('?')); console.log('me

node js 获取程序执行时间 time timeEnd

node js 获取程序执行时间 time timeEnd 示例代码: function getFunRunTime(){ console.time('test'); let temp; for (let index = 0; index < 10000; index++) { temp += index } // time和timeEnd的参数要相同 console.timeEnd('test'); } getFunRunTime(); 控制台输出: test: 0.384765625ms 原

node.js搭建代理服务器请求数据

1.引入node.js中的模块 1 var http = require("http"); 2 var url = require("url"); 3 var qs = require("querystring"); 2.创建服务器 //用node中的http创建服务器 并传入两个形参 http.createServer(function(req , res) { //设置请求头 允许所有域名访问 解决跨域 res.setHeader("

JS获取table列数据

/** * js 获取按钮所在行每一列的数据,返回包含每一列数据的数组 * @param node * @returns {Array} */ function getTableTdValue(node) { // 按钮在td里面,其父节点的父节点是tr. var tr = node.parentNode.parentNode; var trArray = new Array(); for(var i=0; i<tr.cells.length; i++){ trArray[i] = tr1.ce

node.js如何读取MySQL数据

先安装mysql模块. node.js默认安装时,模块文件放在 /usr/local/lib/node_modules 这个目录下,为了便宜管理,模块还是统一安装到这里好. $ cd /usr/local/lib $ npm install mysql 程序文件mysql.js var Client = require('/usr/local/lib/node_modules/mysql').Client; var client = new Client(); client.user = 'ro

js获取电子秤串口数据

需求描述:需要在web端用js获取电子秤的重量.(由于erp限制的原因只能通过js获取,不能修改html,不能引用jquery) 实现目标:电子秤面板上的数据实时反映在我们公司内部erp系统界面上. 通常实现步骤: 首先要从web端获取串口数据需要用到activex(由于我们目前这个需求只需要考虑在IE浏览器下的正常运行) 网上关于对这个控件的调用一般是这样写的 <object classid="clsid:648A5600-2C6E-101B-82B6-000000000014"