nodejs进阶—接收参数
Posted 方帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs进阶—接收参数相关的知识,希望对你有一定的参考价值。
1. get请求参数接收
我们简单举一个需要接收参数的例子
如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球。通过前面的进阶3教程《nodejs进阶(3)—路由处理》重介绍的url模块,我们知道接收方法如下这样写
1 //----------------6_param------------------------------------ 2 var http = require(\'http\'); 3 var url = require(\'url\'); 4 var router = require(\'./router\'); 5 http.createServer(function (request, response) { 6 if(request.url!=="/favicon.ico"){ //清除第2此访问 7 var rdata = url.parse(request.url,true).query; //获取参数 8 if(rdata[\'keyword\']!=undefined){ 9 console.log(rdata[\'keyword\']); 10 } 11 console.log("server执行完毕"); 12 response.end(); 13 } 14 }).listen(8000); 15 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请求
1 <html> 2 <head> 3 </head> 4 <body> 5 登录: 6 <p>这是一个段落</p> 7 <h1>样式1</h1> 8 <form action="/submitLogin" method="post"> 9 用户名:<input value="" name="name"> 10 密码:<input value="" name="pwd"> 11 <input type="submit" value="提交"> 12 </form> 13 <!--img src="./showImg"></img--> 14 </body> 15 <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"
1 //-----------------router.js-------------------------------- 2 var file = require(\'./models/file\'); 3 var url = require(\'url\'); 4 var querystring = require(\'querystring\'); //post需导入 5 module.exports={ 6 login:function(req,res){ 7 res.writeHead(200, {\'Content-Type\':\'text/html\'}); 8 var data = file.readfileSync(\'./views/login.html\'); 9 res.write(data); 10 res.end(); 11 }, 12 register:function(req,res){ 13 var data=file.readfileSync(\'./views/register.html\');//使用同步读取 14 res.write(data); 15 res.end(); 16 }, 17 showImg:function(req,res){ 18 file.readImg(\'./imgs/dog.jpg\',res);//使用同步读取 19 }, 20 submitLogin:function(req,res){ 21 var post = \'\'; //定义了一个post变量,用于暂存请求体的信息 22 req.on(\'data\', function(chunk){//通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中 23 post += chunk; 24 }); 25 //-------注意异步------------- 26 req.on(\'end\', function(){ //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。 27 post = querystring.parse(post); 28 console.log(\'name:\'+post[\'name\']+\'\\n\'); 29 console.log(\'pwd:\'+post[\'pwd\']+\'\\n\'); 30 if(post[\'name\']=="fff"&&post[\'pwd\']=="123"){//简单写登录成功的匹配 31 res.write("登录成功!") 32 }else{ 33 res.write("用户名密码不正确") 34 } 35 res.end(); 36 }); 37 } 38 }
当我们想login页面输入用户名和密码参数时,如果输入fff和123 这时候跳转到loginSubmit输出登录成功!
如果输入其他值跳转后会提示:用户名密码不正确
以上是关于nodejs进阶—接收参数的主要内容,如果未能解决你的问题,请参考以下文章