nodejs进阶(5)—接收请求参数

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1. get请求参数接收

我们简单举一个需要接收参数的例子

如果有个查找功能查找关键词需要从url里接收http://localhost:8000/search?keyword=地球。通过前面的进阶3教程《nodejs进阶(3)—路由处理》重介绍的url模块我们知道接收方法如下这样写

 //----------------6_param------------------------------------      
 var http = require('http');                          
 var url = require('url');          
 var router = require('./router');        
 http.createServer(function (request, response) {                          
     if(request.url!=="/favicon.ico"){  //清除第2此访问              
         var rdata  =  url.parse(request.url,true).query;   //获取参数
         if(rdata['keyword']!=undefined){  
             console.log(rdata['keyword']);      
         }       
         console.log("server执行完毕");   
         response.end();  
     }                          
 }).listen(8000);                          
 console.log('Server running  at  http://127.0.0.1:8000/');       

那么在我们的控制台里会输出查询此“地球”。

get请求我们都可以通过上述这种方式获取参数。

2. post请求参数接收

如果是post请求这些参数不是通过url传递的是包含在request请求体中。请求体里的流需要以事件形式进行接收

req.on('data',  function(chunk){//通过req的data事件监听函数每当接受到请求体的数据就累加到post变量中

post  +=  chunk;

});

我们新建一个页面其中有一个post请求

 <html>
 <head>
 </head>
 <body>
 登录
 <p>这是一个段落</p>
 <h1>样式1</h1>
 <form action="/submitLogin" method="post">
 用户名<input value="" name="name">
 密码<input value=""  name="pwd">
 <input type="submit" value="提交">
 </form>
 <!--img src="./showImg"></img-->
 </body>
 <html>

我们请求login有两个输入项name和pwd当我们输入值后点击提交会发post请求到http://localhost:8000/submitLogin

我们对router.js进行扩展添加submitLogin处理方法。

之前需要引入'querystring'该模块用于实现URL参数字符串与参数对象的互相转换。

大家需要了解学习两个常用的方法

1)require('querystring').parse("name=eee&pwd=123")  结果Object {name: "eee", pwd: "123"}

2)require('querystring').stringify({name:'eee',pwd:'123'})  结果"name=eee&pwd=123"

 //-----------------router.js--------------------------------
 var file = require('./models/file');
 var  url  =  require('url');      
 var  querystring  =  require('querystring');  //post需导入     
 module.exports={
     login:function(req,res){
         res.writeHead(200,  {'Content-Type':'text/html'});    
         var data  =  file.readfileSync('./views/login.html');      
         res.write(data);  
         res.end();      
     },
     register:function(req,res){
         var data=file.readfileSync('./views/register.html');//使用同步读取
         res.write(data);
         res.end();
     },
     showImg:function(req,res){
         file.readImg('./imgs/dog.jpg',res);//使用同步读取
     },
     submitLogin:function(req,res){
         var  post  =  '';  //定义了一个post变量用于暂存请求体的信息      
         req.on('data',  function(chunk){//通过req的data事件监听函数每当接受到请求体的数据就累加到post变量中      
             post  +=  chunk;      
         });      
         //-------注意异步-------------      
         req.on('end',  function(){   //在end事件触发后通过querystring.parse将post解析为真正的POST请求格式然后向客户端返回。      
             post  =  querystring.parse(post);      
             console.log('name:'+post['name']+'\n');        
             console.log('pwd:'+post['pwd']+'\n');
             if(post['name']=="fff"&&post['pwd']=="123"){//简单写登录成功的匹配
                 res.write("登录成功")
             }else{
                 res.write("用户名密码不正确")
             }
             res.end();  
         });    
     }
 } 

 

当我们想login页面输入用户名和密码参数时如果输入fff和123  这时候跳转到loginSubmit输出登录成功

如果输入其他值跳转后会提示用户名密码不正确

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: NodeJS