Node.js中Get和Post请求

   对于HTTP请求来说,我们通常使用的是Get和Post,除此之外还有put,delete等,而对于get来说,比较lightweight,只是对字符串的传输,它会被添加到URL地址里,属于URL的一部分;而对于Post来说,就显得重了一些,它的数据以包的形式存在,除了可以有文本信息,还可以有二进制文件流信息。

1.GET

         --------数据在URL中

使用NodeJs实现对Get请求的处理,nodejs接入的形式为url?param1=zzl&param2=male

下面为GET实例:

var redis = require("redis");
var http = require('http');
var url = require("url");
var info = "通过HTTPGet方式成功加入队列";
http.createServer(function (req, res) {    
var params = url.parse(req.url, true).query;
//解释url参数部分name=zzl&email=zzl@sina.com    
var client = redis.createClient();    
client.lpush("topnews", params.info);   
 res.writeHead(200, {        
'Content-Type': 'text/plain;charset=utf-8'    
});    
client.lpop("topnews", function (i, o) {        
console.log(o);
//回调,所以info可能没法得到o的值,就被res.write输出了    
})    
client.quit();    
res.write(info);    
res.end();}).listen(8000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8000/');


2.POST

               ------数据不在URL中

nodejs接入的形式为{param1="zzl",param2="male"},因为接收的数据量大所以数据会分段发送。

Post由于它的重量,所以不可能说接收就接收,它会存储接入中和接入完成两种状态,两种状态对应着回调方法,即,当然数据处于接入中状态时,处理一种流程;当数据接入完成后,处理另一种流程。

 

//接入中 req.addListener("data", function () {});有一段数据到达,会很多次。

//接收完成 req.addListener("end", function () {});数据全部到达,只有一次。

 

var http = require('http');
var url = require("url");
var querystring = require("querystring");
http.createServer(function (req, res) {   
 // 设置接收数据编码格式为 UTF-8    
req.setEncoding('utf-8');    
var postData = ""; //POST & GET : name=zzl&email=zzl@sina.com   
 // 数据块接收中  
req.addListener("data", function (postDataChunk) {        
postData += postDataChunk;    
});    
// 数据接收完毕,执行回调函数    
req.addListener("end", function () {        
console.log('数据接收完毕');        
var params = querystring.parse(postData);  
解释表单数据部分
{name="zzl",email="zzl@sina.com"}        
console.log(params);        
console.log(params["name"]);        
PushToRedis(params["name"]);        
res.writeHead(500, {            
"Content-Type": "text/plain;charset=utf-8"        });        
res.end("数据提交完毕");    
});}).listen(8000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8000/');


 

如果你觉得还是没有理解具体的用法,我下面还写了一个例子:

const http = require("http")
const fs = require("fs");
const querystring = require("querystring");
const urlLib = require("url");

var server = http.createServer(function(req,res){
    //GET
    var obj = urlLib.parse(req.url,true);
    var url = obj.pathname;
    const GET = obj.query;
    //POST
    var str="";
    req.on("data",function(data){
        str+=data;
    });
    req.on("end",function(){
        const POST = querystring(str);
    });
    console.log(url,GET,POST);

    if(url == './user'){//请求
        switch(GET.act){
            case 'rag':
                if(users[GET.user]){
                    res.write(OK,false,'msg',"此用户已经存在!");
                }
                else{
                    users[GET.user]=GET.pass;
                    res.write("OK",true,"msg","注册成功!");
                }
                break;
              case 'login':
                if(users[GET.user] == null){
                    res.write("OK",false,"msg","该用户名已经被注册!");
                }else if(users[GET.user]!=GET.pass){
                    res.write("OK",false,"msg","用户名或密码错误!");
                }else{
                    res.write("OK",true,"msg","登录成功!");
                }
                break;
              default:
                res.write("OK",false,"msg","未知的act");
        } 
        res.end();  
    }else{//文件

    }
    //文件请求
    var file_name = './www' + url;
    fs.readFile(file_name,function(error,data){
        if(err){
            res.write('404');
        }
        else{
            res.write(data);
        }
        res.end();
    });
});

server.listen(8080,function(){
    console.log("文件开启成功!");
}); 

 

以上皆为自己想法,有分歧欢迎私信。 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值