Node.js(七)HTTP模块http

2019-03-03  本文已影响0人  偶余杭

http是Node.js的核心模块之一,要使用http模块,需要:

const http = require('http')

创建一个服务器


使用到的api:

http.createServer([options][, requestListener])

此方法返回一个新建的http.Server实例。

http.Server类,继承自net.Server,net模块也是核心内置模块之一,用于创建基于流的 TCP 或 IPC 的服务器(net.createServer())与客户端(net.createConnection())。net.Server类用于创建 TCP 或 IPC server

Server类的部分api:

  • server.listen():启动 HTTP 服务器监听连接。 此方法与 net.Server 中的 server.listen() 相同。
  • server.close([callback]):停止服务器接受新连接
const http = require('http')
const fs = require('fs')
const path = require('path')
http.createServer((req,res)=>{
    const {url,method} = req;
    console.log('来了一个请求');
    if(url === '/' && method === 'GET'){
        //读取首页
        fs.readFile(path.resolve('./index.html'),(err,data)=>{
            if(err){
                res.statusCode = 500;//服务器内部错误
                res.end('500 - Internal Sever Error')
                return;
            }
            res.statusCode = 200;//请求成功
            res.setHeader('Content-Type','text/html')
            //end方法可以使用buffer,加不加toString都可以
            res.end(data)
        })
    }
}).listen(3000);

以上的createServer方法传入一个函数作为参数,此函数有两个参数,第一个参数是一个对象,表示客户端的HTTP请求,第二个参数也是一个对象,表示服务端的HTTP回应。服务端的HTTP回应调用writeHead方法写入HTTP回应的头信息,使用end方法写入HTTP回应的具体内容,并关闭对话。listen方法传入数字作为端口,表示启动服务器实例,监听本机特定端口。

http.ClientRequest 类


这个类产生的实例表示正在进行的请求,由http.request()内部创建并返回,createServer方法的回调函数中第一个参数也是此类的实例。

修改请求头
request.setHeader('Content-Type', 'application/json');
request.setHeader('content-type', 'text/html');
request.setHeader('Content-Length', Buffer.byteLength(body));
request.setHeader('Cookie', ['type=ninja', 'language=javascript']);
const contentType = request.getHeader('Content-Type');
// contentType 是 'text/html'。
const contentLength = request.getHeader('Content-Length');
// contentLength 的类型为数值。
const cookie = request.getHeader('Cookie');
// cookie 的类型为字符串数组。
完成发送请求

request.end([data[, encoding]][, callback])

中止请求

request.abort()
将请求标记为中止。 调用此方法将导致响应中剩余的数据被丢弃并且套接字被销毁

发送数据到服务器

request.write(chunk[, encoding][, callback])

http.ServerResponse 类


此类的实例由HTTP服务器在内部创建,不用用户创建,它作为createServer第二个参数传给request事件。
此实例可调用的常用api:

// 返回 content-type = text/plain
const server = http.createServer((req, res) => {
  res.setHeader('Content-Type', 'text/html');
  res.setHeader('X-Foo', 'bar');
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('ok');
});

http.IncomingMessage 类


IncomingMessage 对象由 http.Serverhttp.ClientRequest 创建,并分别作为第一个参数传给 'request''response' 事件。 它可用于访问响应状态、消息头、以及数据。

上一篇 下一篇

猜你喜欢

热点阅读