[Node.js] 笔记#1 Web 模块 | 收发 GET/POST

最近开始学 Node.js 了,写一写笔记,稍微记一下菜鸟教程上没有细讲的内容以及自己摸索的经验来巩固一下

这篇笔记包含 Web 模块的基本使用以及收发 GET/POST 请求的方法

Head Pic: 「無題」/「かるまゆ」[pixiv]

Node.js Web 模块

作服务端,接收请求

GET

var http = require('http');
var url = require('url');
var util = require('util');

//                     req请求  res返回
http.createServer(function(req, res){
    //writeHeader(状态码,响应头属性)
    res.writeHeader(200, {'Content-Type':'text/html;charset=UTF-8'});

    //解析 url 参数
    //parse() 将字符串转成对象,例如 req.url="/?url=123&name=321"
    //true:params 将是一个含有属性的对象{url:"123",name:"321"}
    //false:params 将是字符串"url=123&name=321"
    var params = url.parse(req.url, true).query;

    //使用 write() 向返回页面中输出内容
    res.write(params.url);
    res.write("<br>");
    res.write(params.name);

    //使用 end() 结束输出,必须要有 end()
    //可以带上参数:end("xxxxxx"),表示输出此内容之后结束输出
    res.end();
}).listen(8080);    //监听端口

POST

接收 POST 请求与 GET 请求不一样的一点就是,接收 POST 必须通过请求(req)的data事件来获取 POST 数据,然后通过end事件的回调函数来处理余下的任务

var http = require('http');
var querystring = require('querystring');

http.createServer(function (req, res) {
    //暂存请求体信息
    var body = "";

    //每当接收到请求体数据,累加到post中
    req.on('data', function (chunk) {
        //一定要使用+=,如果body=chunk,因为请求favicon.ico,body会等于{}
        body += chunk;
    });

    //数据接受完后,通过 querystring.parse 将 post 解析为真正的 POST 请求格式
    req.on('end', function () {
        //将一个字符串反序列化为一个对象
        body = querystring.parse(body);

        res.writeHead(200, {'Content-Type':'text/html;charset=utf8'});
        if(body.name && body.url) { // 输出提交的数据
            res.write(body.name);
            res.write("<br>");
            res.write(body.url);
        } else {
            res.write("xxxxxxx");
        }
        res.end();
    });
}).listen(8080);

作为客户端,发送请求并获取返回

GET

//如果需要发送 HTTPS 请求,则需要 require('https')
var http = require('http');

//发送 GET 请求  get(URL,回调函数)
http.get('http://xxx.xx', function(res) {
    //储存返回的 HTML 内容
    var html = '';
    //每收到一段数据就 += 一次
    res.on('data', function(data) {
        html += data;
    });

    //收到所有 HTML 内容后
    res.on('end', function() {
        //TODO
    });
});

POST

实际上上面的 GET 请求也可以用这里 POST 请求的方式来写,即使用http.request()而不是http.get(),但是直接用get()会简单很多

//如果需要发送 HTTPS 请求,则需要 require('https')
var http = require('http');
var querystring = require('querystring');

//POST 参数,直接写成一个对象
var contents = querystring.stringify({
    name:'Jindai Kirin',
    email:'jindaikirin@ykilin.moe',
    address:'lolico.moe'
});

//请求选项
var options = {
    host:'lolico.moe',
    path:'/xxx/xxx',
    method:'POST',
    headers:{
        'Content-Type':'application/x-www-form-urlencoded',
        'Content-Length':contents.length
    }
}

var req = http.request(options, function(res){
    var html = '';
    res.setEncoding('utf8');

    res.on('data',function(data){
        html += data;
    });

    res.on('end', function() {
        //TODO
    });
});

//发送请求
req.write(contents);
req.end;

搬瓦工VPS优惠套餐又又又补货啦,建站稳如狗,支持支付宝,循环出账94折优惠码BWH1ZBPVK
①年付仅需$18的中国直连的亚洲优化线路,1核/512M内存/10G硬盘/1000GB@1Gbps【点击购买
②年付$18的可换成CN2线路(流量会变为180G),1核/512M内存/10G硬盘/500GB@1Gbps【点击购买
③年付$28CN2线路,1核/512M内存/10G硬盘/500GB@1Gbps【点击购买

我的文章对您有帮助吗?
我很可爱 请给我钱
扫一扫拿红包 → 扫商家收款码 → 转账与红包相等的金额
即可免费赞赏,又可拿支付宝奖励金!
现在支付宝超抠门的,红包只给一两分钱了
Last modification:February 11th, 2018 at 04:23 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment