Node.js之http模块详解之服务器端

我们知道传统的HTTP服务器是由Aphche、Nginx、IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,用于搭建 HTTP 服务端和客户端
http模块中提供了四个类和一些方法,这里只叙述这四个类和部分方法的详解

如何使用http模块

var http = require('http');

http.Server类

http.Server类是用来创建服务器的。包含的事件和属性如下:

  1. checkContinue事件:每次收到 HTTP Expect: 100-continue1 的请求时都会触发。如果未监听此事件,服务器将自动响应 100 Continue。在触发和处理此事件时,不会触发 ‘request’ 事件。
  2. checkExpectation事件:每次收到带有 HTTP Expect 请求头的请求时触发,其中值不是 100-continue。 如果未监听此事件,则服务器将根据需要自动响应 417 Expectation Failed。在触发和处理此事件时,不会触发 ‘request’ 事件。
  3. close事件:当服务器关闭时触发。
  4. connection事件:建立新的 TCP 流时会触发此事件。
  5. request事件:每当有请求时触发。
  6. listen():启动 HTTP 服务器用于监听连接。用于监听端口号
    var http = require("http");
    var server = new http.Server();
    server.on('request',function(req,res){
        res.writeHead(200,"success",{
            "Content-Type":"text/plain"
        });
        res.write("hello nodejs","utf8");
        res.end();
    })
    server.on('connection',function(){
        console.log('hello node!');
    });
    server.on('close',function(){
        console.log('server will close');
    });
    server.listen(3000);

在上述案例中,我们创建了一个简单的服务器,利用request事件监听请求信息,request事件的监听器接收两个参数。

其中req为请求内容,res为响应内容。两个参数分别是http.IncomingMessage类(它实现了可读流的接口)和http.ServerResponse类(它实现了可写流的接口)的实例

在http模块提供了一个创建服务器的封装的方法http.createServer()。

 const http = require('http');
    const server = http.createServer(function(req,res) {
    
    }).listen(3000);

http.createServer()方法创建的时候自动给request事件绑定了监听器,监听器的内容是一样的。

http.ServerResponse类

http.ServerResponse类是在服务器内部创建的,用于生成服务端响应信息res,并作为第二个参数传递到request事件的监听器中。包含的事件和属性如下:

  1. close事件:表明响应已完成,或者其底层的连接过早被终止(在响应完成之前)。
  2. end([data[, encoding]][, callback]):此方法向服务器发出信号,表明已发送所有响应头和主体,该服务器应该视为此消息已完成。必须在每个响应上调用此 response.end() 方法。
  3. response.flushHeaders():刷新响应头
  4. response.setHeader(name, value):为隐式响应头设置单个响应头的值。如果此响应头已存在于待发送的响应头中,则其值将被替换。
  5. response.getHeader(name):返回某个响应头信息
  6. response.getHeaderNames():返回一个数组,返回所有设置的响应头的唯一名称
  7. response.getHeaders():返回当前传出的响应头的浅拷贝
  8. response.hasHeader(name):用于判断响应头是否设置了name 标识的响应头
  9. response.headersSent:判断是否已经发送了响应头。发送了则为true,反之为false
  10. response.removeHeader(name):删除某个响应头信息
  11. response.write(chunk[, encoding][, callback]):如果调用此方法并且尚未调用 response.writeHead(),则将切换到隐式响应头模式并刷新隐式响应头。这会发送一块响应主体。 可以多次调用该方法以提供连续的响应主体片段。
  12. response.writeHead(statusCode[, statusMessage][, headers]):向请求发送响应头。如果使用这个方法就表明响应头不使用隐式响应头模式

从上列讲述的方法和属性可以看出,ServerResponse 基本只有三个作用:返回响应头、响应内容以及结束请求

 const http = require('http'); 
    const server = http.createServer(function(req,res) {
        res.writeHead(200,"success",{
            "Content-Type":"text/plain"
        });
        res.write("hello nodejs","utf8");
        res.end();
    }).listen(3000);

writeHead()方法写入响应头或使用隐式响应头模式,write()向请求体中写入响应信息。每次响应信息完成后都要调用end()方法,该方法会通知服务器,所有响应头和响应主体都已被发送,即服务器将其视为响应已完成


  1. HTTP Expect: 100-continue:见 详细解释. ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值