经过前面七天的学习,对Node.js开发已经有了一个初步的认识,今天继续学习Node.js在web开发参数传递相关内容,仅供学习分享使用,如有不足之处,还请指正。

参数传递方式

在Node.js中,参数传递常见的共两种方式:

  1. GET方式:通过地址栏键=值的方式进行传递。
  2. POST方式:通过表单的方式传递请求数据。

GET方式

GET方式通常是在请求地址中以【?参数1=值1&参数2=值2】的格式进行传递,在Node.js中可以通过获取url然后进行获取参数,如下所示:

 1 //1.引入http模块
 2 var http  = require('http');
 3 //2.创建服务
 4 var server = http.createServer();
 5 //3. 监听请求事件,当有请求时,触发回调函数
 6 server.on('request',function(req,res){
 7     res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
 8     var url = req.url;
 9     if(url.indexOf('?')>0){
10         params = url.split('?')[1];
11         paramArray = params.split('&');
12         res.write("<h3>请求的参数为:</h3>");
13         for(var index in paramArray){
14             res.write(paramArray[index])
15             res.write("<br />");
16         }
17     }
18     res.end();
19 });
20 
21 //4. 监听8080端口
22 server.listen(8080,function(){
23     console.log("server is running");
24 });

运行示例,在浏览器中打开,如下所示:

Node.js基础入门第八天

POST方式

目前一般采用form表单的方式传递POST数据。在Node.js中,POST传递的数据在请求体中。

首先创建一个reg.html静态html页面,然后提交数据到action.html,具体如下所示:

 1 //1.引入http模块
 2 var http  = require('http');
 3 var fs = require('fs');
 4 var path = require('path');
 5 //2.创建服务
 6 var server = http.createServer();
 7 var extnames = {".html":"text/html",".css":"text/css",".png":"image/png"};
 8 //3. 监听请求事件,当有请求时,触发回调函数
 9 server.on('request',function(req,res){
10     var url=req.url;
11     if(url==="/"){
12         url="/index.html";
13     }
14     var localPath = './www'+url;
15     var extname = path.extname(localPath);
16     res.writeHead(200,{"content-type":""+extnames[extname]+";charset=utf-8"});
17     if(url==="/action.html"){
18         //从请求主体中获取POST方式传输的数据
19         var params='';
20         req.on('data',function(data){
21             params += data.toString();
22         });
23         //监听结束事件
24         req.on('end',function(){
25             res.write("<h3>后台已经收到请求:</h3>");
26             res.write(params);
27             res.end();
28             
29         });
30         return;
31     }
32     
33     console.log(localPath);
34     if(extname===".ico"){
35         res.end();
36     }else{
37         fs.readFile(localPath,function(err,data){
38             res.write(data);
39             res.end();
40         });
41     }
42 });
43 
44 //4. 监听8080端口
45 server.listen(8080,function(){
46     console.log("server is running");
47 });

运行服务,然后在浏览器输入网址,如下所示:

Node.js基础入门第八天

注意:可以看出,GET方式和POST方式的参数结构都是一样的,只是GET通过URL,POST通过请求主体。

动态网页

在之前的示例中,所有的html页面都是静态页面,不会随着用户请求的变化而变化。那如何动态的变更网页呢?答案是采用模板。

首先创建一个html页面,并在页面中定义一个变量。如下所示:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>这是首页</title>
 6         <link type="text/css" href="css/index.css" />
 7     </head>
 8     <body>
 9         <h3>这是首页</h3>
10         <h3>你的访问IP为:</h3>
11         <h3><%=ipAddr%></h3>
12     </body>
13 </html>

然后在Node.js后端程序中,动态获取变量的值,并进行替换,如下所示:

 1 var http  = require('http');
 2 var fs = require('fs');
 3 var path = require('path');
 4 //2.创建服务
 5 var server = http.createServer();
 6 var extnames = {".html":"text/html",".css":"text/css",".png":"image/png"};
 7 //3. 监听请求事件,当有请求时,触发回调函数
 8 server.on('request',function(req,res){
 9     var url=req.url;
10     if(url==="/"){
11         url="/index.html";
12     }
13     var localPath = './www'+url;
14     var extname = path.extname(localPath);
15     res.writeHead(200,{"content-type":""+extnames[extname]+";charset=utf-8"});
16     console.log(localPath);
17     if(extname===".ico"){
18         res.end();
19     }else{
20         fs.readFile(localPath,function(err,data){
21             var ip = req.socket.remoteAddress;
22             var content  = render(data.toString(),'<%=ipAddr%>',ip);
23             res.write(content);
24             res.end();
25         });
26     }
27 });
28 
29 //4. 监听8080端口
30 server.listen(8080,function(){
31     console.log("server is running");
32 });
33 
34 function render(html,name,value){
35     return html.replace(name,value);
36 }

运行示例,在浏览器中输入http://http://127.0.0.1:8080/,如下所示:

Node.js基础入门第八天

注意:IP为客户端IP,随着访问的客户端电脑而改变。

以上示例都是Node.js的原生开发方式,存在诸多不便,后面将通过引入框架来提高开发的效率。

备注

梁州故人【作者】韦应物【朝代】唐

江汉曾为客,相逢每醉还。
浮云一别后,流水十年间。
欢笑情如旧,萧疏鬓已斑。
何因不归去,淮上有秋山。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。