Node.js的http模块的使用

http模块简介

http模块中封装了一个HTTP服务器和一个简易的HTTP客户端:使用http.Server类创建一个基于事件的HTTP服务器,而使用http.request()和http.get()方法则可以作为HTTP客户端向服务器发起请求。

  1、http.Server 类:用于创建HTTP服务器,使用时需要先实例化;

  2、http.ClientRequest 类:该对象在 http.request() 内部被创建并返回。它表示着一个正在处理的请求;

  3、http.IncomingMessage 类:IncomingMessage对象由 http.Server 或 http.ClientRequest 创建,并作为第一个参数分别传递给 'request' 和 'response' 事件。 它可以用来访问响应状态、消息头、以及数据。它实现了可读流接口;

  4、http.ServerResponse 类:ServerResponse对象由http.Server创建,并作为第二个参数传递给 'request' 事件。它实现了可写流接口;

  5、http.createServer( [callback] )方法:返回一个http.Server对象,callback会被自动添加到 'request' 事件中;

  6、http.request( options[, callback] )方法:作为http客户端,向服务器发送请求,可选参数callback会被自动添加到 'response'事件中;

  7、http.get( options[, callback] )方法:http.request()方法的简化版,主要区别是http.get()自动将请求方法设为了"GET",同时不需要手动调用req.end();

http创建服务器

// 服务器
var http = require("http")
var fs = require("fs")
var path = require("path")

var app = http.createServer(function (req, res) {
    // 如果请求的是ico图标 不返回数据
    if (req.url.includes(".ico")) { return res.end() }
    // if(req.url.includes(".txt")) 设置mime类型  text/plain
    // data 事件 请求数据在传递过程中,有可能会多次执行data事件
    req.on("data", function (d) {
        console.log(d.toString());
    })
    // 数据请求结束时
    req.on("end", function (e) {
        console.log("本次请求结束");
    })
    // 设置响应头
    res.writeHead(200, {
        "Content-Type": "text/plain"
    })
    //  读取文件
    fs.readFile(__dirname + req.url, function (err, data) {
        if (err) {
            res.end("404")
        }else{
            res.end(data.toString())
        }
    })

})
// 监听
app.listen(8080, function () {
    console.log("running");
})

http.request()发送GET请求

var http = require("http")
var option = {
    host: "localhost", // ip地址
    port: 8080, //端口
    method: "GET", //请求方式
    path: "/1.txt", // 文件路径
    headers:{ 
        "Content-Type":"text/plain" // 请求头
    }
}
// 使用http模块的request()向http服务器发送请求
var req = http.request(option, function (res) {
    let info = ""
    res.on("data", function (chunk) {
        console.log('1111');
        info += chunk.toString()
    })
    res.on("end", function (err) {
        console.log(info);
    })
})
//使用http.request()必须总是调用req.end()来表明请求的结束,即使没有数据被写入请求体;
req.end()

关于http.request(options[, callback]):options是一个对象,包含了请求的相关参数:http://nodejs.cn/api/http.html#http_http_request_options_callback

  可选参数callback会作为单次监听器被添加到”response“事件,即当请求的响应被接收到时就会调用该回调函数。它在被执行时带有一个参数res,该参数是一个 http.IncomingMessage类的实例。返回值是一个http.ClientRequest 类的实例,它表示着一个正在处理的请求。如果请求过程中遇到任何错误,则在返回的请求对象中会触发"error"事件;

使用http.request()必须总是调用req.end()来表明请求的结束,即使没有数据被写入请求体;

http.request()发送POST请求

var http = require("http")
var querystring = require("querystring")
// 在传递的时候必须传递字符串
var data = querystring.stringify({
    name: "zhangsan",
    age: 10
})
var option = {
    host: "localhost",
    port: "8080",
    method: "POST",
    headers: {
        "Content-Type": "application/x-www-form-urlencode",
        // 必须是在请求头里面设置内容的长度
        "Content-Length": Buffer.byteLength(data) // 获取数据长度
    }
}
var req = http.request(option, function (res) {
    let info = ""
    res.on("data", function (chunk) {
        console.log('1111');
        info += chunk.toString()
    })
    res.on("end", function (err) {
        console.log(info);
    })
})
// 把请求数据放在请求体里面
req.write(data) 
req.end()

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值