zoukankan      html  css  js  c++  java
  • 35.Node.js GET/POST请求

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html

    在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交。

    表单提交到服务器一般都使用 GET/POST 请求。

    本章节我们将为大家介绍 Node.js GET/POS T请求。


    获取GET请求内容

    由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数。

    node.js 中 url 模块中的 parse 函数提供了这个功能。

    实例

    1 var http = require('http');
    2 var url = require('url');
    3 var util = require('util');
    4  
    5 http.createServer(function(req, res){
    6     res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
    7     res.end(util.inspect(url.parse(req.url, true)));
    8 }).listen(3000);

    在浏览器中访问 http://localhost:3000/user?name=菜鸟教程&url=www.runoob.com 然后查看返回结果:

    获取 URL 的参数

    我们可以使用 url.parse 方法来解析 URL 中的参数,代码如下:

     1 var http = require('http');
     2 var url = require('url');
     3 var util = require('util');
     4  
     5 http.createServer(function(req, res){
     6     res.writeHead(200, {'Content-Type': 'text/plain'});
     7  
     8     // 解析 url 参数
     9     var params = url.parse(req.url, true).query;
    10     res.write("网站名:" + params.name);
    11     res.write("
    ");
    12     res.write("网站 URL:" + params.url);
    13     res.end();
    14  
    15 }).listen(3000);

    实例

    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(" "); res.write("网站 URL:" + params.url); res.end(); }).listen(3000);

    在浏览器中访问 http://localhost:3000/user?name=菜鸟教程&url=www.runoob.com 然后查看返回结果:


    获取 POST 请求内容

    POST 请求的内容全部的都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。

    比如上传文件,而很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以 node.js 默认是不会解析请求体的,当你需要的时候,需要手动来做。

    基本语法结构说明

     1 var http = require('http');
     2 var querystring = require('querystring');
     3  
     4 http.createServer(function(req, res){
     5     // 定义了一个post变量,用于暂存请求体的信息
     6     var post = '';     
     7  
     8     // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
     9     req.on('data', function(chunk){    
    10         post += chunk;
    11     });
    12  
    13     // 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
    14     req.on('end', function(){    
    15         post = querystring.parse(post);
    16         res.end(util.inspect(post));
    17     });
    18 }).listen(3000);

    以下实例表单通过 POST 提交并输出数据:

     1 var http = require('http');
     2 var querystring = require('querystring');
     3  
     4 var postHTML = 
     5   '<html><head><meta charset="utf-8"><title>菜鸟教程 Node.js 实例</title></head>' +
     6   '<body>' +
     7   '<form method="post">' +
     8   '网站名: <input name="name"><br>' +
     9   '网站 URL: <input name="url"><br>' +
    10   '<input type="submit">' +
    11   '</form>' +
    12   '</body></html>';
    13  
    14 http.createServer(function (req, res) {
    15   var body = "";
    16   req.on('data', function (chunk) {
    17     body += chunk;
    18   });
    19   req.on('end', function () {
    20     // 解析参数
    21     body = querystring.parse(body);
    22     // 设置响应头部信息及编码
    23     res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
    24  
    25     if(body.name && body.url) { // 输出提交的数据
    26         res.write("网站名:" + body.name);
    27         res.write("<br>");
    28         res.write("网站 URL:" + body.url);
    29     } else {  // 输出表单
    30         res.write(postHTML);
    31     }
    32     res.end();
    33   });
    34 }).listen(3000);

    实例

    执行结果 Gif 演示:

  • 相关阅读:
    初认识AngularJS
    (imcomplete) UVa 10127 Ones
    UVa 10061 How many zero's and how many digits?
    UVa 11728 Alternate Task
    UVa 11490 Just Another Problem
    UVa 10673 Play with Floor and Ceil
    JSON对象和字符串的收发(JS客户端用typeof()进行判断非常重要)
    HTML.ActionLink 和 Url.Action 的区别
    EASYUI TREE得到当前节点数据的GETDATA方法
    jqueery easyui tree把已选中的节点数据拼成json或者数组(非常重要)
  • 原文地址:https://www.cnblogs.com/sharpest/p/8058047.html
Copyright © 2011-2022 走看看