我们简单举一个需要接收参数的例子
如果有个查找功能,查找关键词需要从 url 里接收,http://localhost:8000/search?keyword = 地球。通过前面的进阶 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 请求我们都可以通过上述这种方式获取参数。
如果是 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 输出登录成功!
如果输入其他值跳转后会提示:用户名密码不正确
来源: