Node.js GET/POST请求的练习过程

代码根据网上的教程进行了一些修改,毕竟参看教程得出的结果总与教程不同。文章也只列出一些跟我本身学习有关的知识,其余并不展开,或许是我不懂,或许是不用说也知道。javascript

<示例一>html

根据浏览器的请求,获取url中的信息并将得到的对象的字符串形式做为反馈返回到页面上来。java

代码:node

//server.js

var http = require('http');
var url = require('url');
var util = require('util');
 
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);

结果:jquery

知识点:浏览器

在cmd控制台运行了node server.js后,在浏览器输入网址,执行结果如上图。页面得到了一个Url对象的字符串,这个被转成字符串要归功于util.inspect()方法。至于引入的url包如何使用及其方法,目前我还没学到,控制台打印出来看了看,不甚懂,此处姑且只管结果。服务器

 

<示例二>函数

获取url中的键值对post

代码:学习

var http = require('http');
var url = require('url');
var util = require('util');
 
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});
 
    // 解析 url 参数
    var params = url.parse(req.url, true).query;
    res.write("网站名:" + params.name);
    res.write("\n");
    res.write("网站 URL:" + params.url);
    res.end();
 
}).listen(3000);

结果:

知识点:

根据示例一能够知道咱们是在Url对象中取jquery得到键值对的。向响应的报文写入内容既可使用示例一中的方法在res.end()方法中直接添加参数,也能够如实例二单写res.write()(此处内容须要之后单独学习)。页面中的内容出现了乱码,多是中文在编码解析的时候不一致致使的(待解决,目前用纯英文内容能够解决问题)。

另,示例一和示例二均为获取GET请求内容,因为GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,所以能够手动解析后面的内容做为GET请求的参数。node.js中url模块中的parse函数提供了这个功能。

<示例三>

代码:

var http = require('http');
var util = require("util");
var querystring = require('querystring');
 
http.createServer(function(req, res){
    // 定义了一个post变量,用于暂存请求体的信息
    var post = '';     
 
    // 经过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
    req.on('data', function(chunk){    
        post += chunk;
    });
 
    // 在end事件触发后,经过querystring.parse将post解析为真正的POST请求格式,而后向客户端返回。
    req.on('end', function(){    
        post = querystring.parse(post);
        res.end(util.inspect(post));
        console.log(util.inspect(post));
    });
}).listen(3000);

结果:

知识点:

代码只是演示了post请求的过程,最终由于没有任何表单的提交,致使得到的内容为空。

<示例四>

代码:

var http = require('http');
var querystring = require('querystring');
 
var postHTML = 
  '<html><head><meta charset="utf-8"><title>Node.js 实例</title></head>' +
  '<body>' +
  '<form method="post">' +
  '网站名: <input name="name"><br>' +
  '网站 URL: <input name="url"><br>' +
  '<input type="submit">' +
  '</form>' +
  '</body></html>';
 
http.createServer(function (req, res) {
  var post = "";
  req.on('data', function (chunk) {
    post += chunk;
  });
  req.on('end', function () {
    // 解析参数
    post = querystring.parse(post);
    // 设置响应头部信息及编码
    res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
 
    if(post.name && post.url) { // 输出提交的数据
        res.write("网站名:" + post.name);
        res.write("<br>");
        res.write("网站 URL:" + post.url);
    } else {  // 输出表单
        res.write(postHTML);
    }
    res.end();
  });
}).listen(3000);

结果:

(提交前)

(提交后)

知识点:

querystring.parse()方法用于将键值对形式的字符串转换为对象。post请求不读取?后面的参数,每次加载连接都会进行请求。

另,示例三和示例四为POST 请求,POST 请求的内容所有的都在请求体中,http.ServerRequest 并无一个属性内容为请求体,缘由是等待请求体传输多是一件耗时的工做。

好比上传文件,而不少时候咱们可能并不须要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,全部node.js 默认是不会解析请求体的,当你须要的时候,须要手动来作。

 

参考:

  1. http://www.runoob.com/nodejs/node-js-get-post.html【Node.js GET/POST请求】
相关文章
相关标签/搜索