Nodejs 学习(四)--参数的接收

本文深入讲解了Web开发中GET和POST两种参数提交方式的区别及应用。GET方法将参数附在URL后面,适合提交非敏感信息;POST方法通过HTTP请求体传递参数,适合提交敏感信息。文章还介绍了如何在Node.js环境中解析这两种提交方式的数据。
摘要由CSDN通过智能技术生成

web参数提交方式为get和post

get方法的参数接收
例如我们的login页面中存在一个表单, 用户可以输入email和password

<form action="./login" method="get">
    <table>
        <tr>
            <td>Email</td>
            <td><input type="text" name="email"></td>
        </tr>
        <tr>
            <td>password</td>
            <td><input type="password" name="pwd"></td>
        </tr>
        <tr>
            <td><input type="submit" value="login"></td>
        </tr>
    </table>
</form>

当用户输入email和password提交后, 我们知道get方法会将提交的信息显示在url中, 例如提交的信息为email:Nicolas@email.com, password:123456, 则url就会成为http://localhost/login?email=Nicolas%40email.com&pwd=123456(当然这不是一个安全的方法)。 由此, 我们可以利用之前学过的url标准模块对此时的url进行解析, 提取出前端提交的信息。
运行url.parse('http://localhost/login?email=Nicolas%40email.com&pwd=123456', true)的到的结果为

Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'localhost',
  port: null,
  hostname: 'localhost',
  hash: null,
  search: '?email=Nicolas%40email.com&pwd=123456',
  query: { email: 'Nicolas@email.com', pwd: '123456' },
  pathname: '/login',
  path: '/login?email=Nicolas%40email.com&pwd=123456',
  href: 'http://localhost/login?email=Nicolas%40email.com&pwd=123456' }

得到一个对象(命名为rdata), 这样我们可以通过rdata.email (或rdata[‘email’])和rdata.pwd(或rdata[‘pwd’])获取到提交的信息,具体代码如下

    //get提交方式
    var rdata=url.parse(req.url,true).query;
        if (rdata['email'] != undefined){
            console.log(rdata['email']);
            console.log(rdata['pwd']);
        }

post方法的参数接收
还是几乎相同的前端表单, 只是methd改为post。 post为匿名请求方式, 所以请求内容不显示在url上, 所以不可以用get方法提取请求信息。我们要利用request对象中的“data”事件和“end”事件实现我们的目的。 首先在“data”事件回调函数中接收前端的传过来的数据(全部数据), “end”事件在数据已经传完后唤醒, 我们可以在“end”事件回调函数中对得到的数据进行解析。

//post 提交方式
//post 提交方式
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); 
    if (post['email'] != undefined){
        console.log('email:'+post['email']+'\n');        
        console.log('pwd:'+post['pwd']+'\n');
    }
    function recall(data) {
        res.write(data.toString())
        res.end()
    }
    optfile.readfile('./views/login.html', recall)
        });            
});      

这里注意, post方法提交属于异步提交(get为同步), “data”,”end”事件均为异步事件, 所以要不最后对提取出信息的处理放到“end”事件回调函数里面, 保证所需信息都准备好之后再进行处理 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值