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

web参数提交方式为get和post

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

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

当用户输入email和password提交后, 我们知道get方法会将提交的信息显示在url中, 例如提交的信息为email:[email protected], 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: '[email protected]', 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”事件回调函数里面, 保证所需信息都准备好之后再进行处理 。

你可能感兴趣的:(Nodejs,nodejs)