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输出登录成功
如果输入其他值跳转后会提示用户名密码不正确