Page 81 - Node.js开发指南
P. 81

4.5  HTTP 服务器与客户端    73


                     path: '/user?name=byvoid&email=byvoid@byvoid.com',                               1
                     href: '/user?name=byvoid&email=byvoid@byvoid.com' }
                   通过 url.parse ,原始的 path 被解析为一个对象,其中 query 就是我们所谓的 GET
                                   ①
               请求的内容,而路径则是 pathname。

                   4. 获取 POST 请求内容                                                                    2
                   HTTP 协议 1.1 版本提供了8种标准的请求方法,其中最常见的就是 GET 和 POST。相比
               GET  请求把所有的内容编码到访问路径中,POST  请求的内容全部都在请求体中。
               http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件
                                                                                                      3
               耗时的工作,譬如上传文件。而很多时候我们可能并不需要理会请求体的内容,恶意的 POST
               请求会大大消耗服务器的资源。所以 Node.js 默认是不会解析请求体的,当你需要的时候,
               需要手动来做。让我们看看实现方法:

                                                                                                      4
                   //httpserverrequestpost.js

                   var http = require('http');
                   var querystring = require('querystring');
                   var util = require('util');
                                                                                                      5
                   http.createServer(function(req, res) {
                     var post = '';

                     req.on('data', function(chunk) {
                       post += chunk;                                                                 6
                     });

                     req.on('end', function() {
                       post = querystring.parse(post);
                                                                                                      7
                       res.end(util.inspect(post));
                     });

                   }).listen(3000);

                   上面代码并没有在请求响应函数中向客户端返回信息,而是定义了一个 post 变量,用
                                                                                                      8
               于在闭包中暂存请求体的信息。通过 req 的 data 事件监听函数,每当接受到请求体的数据,
               就累加到 post 变量中。在 end 事件触发后,通过 querystring.parse 将 post 解析为
               真正的 POST 请求格式,然后向客户端返回。
                                                                                                      9
                                  不要在真正的生产应用中使用上面这种简单的方法来获取 POST  请
                              求,因为它有严重的效率问题和安全问题,这只是一个帮助你理解的示例。

               ——————————                                                                             10
                  ① url 模块的说明参见 http://nodejs.org/api/url.html。
   76   77   78   79   80   81   82   83   84   85   86