重学Node.js系列(七)

74 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

今天来学习Node.js 内置 API 模块的http模块。

http模块

http模块是Node.js官方提供的,用来创建Web服务器的模块。

//引用http模块 
const http = require('http');

通过http.createServer()方法,可以将一台普通的电脑变为一台Web服务器,从而对外提供Web资源服务。

web服务器(Web Server),一般指网站服务器,主要功能是提供网上信息浏览服务,通过 HTTP 协议与客户端通信。这个客户端通常指的是 Web 浏览器。
目前最主流的三个Web服务器是Apache、Nginx、Microsoft的Internet信息服务器(Internet Information Services,IIS)。

Web服务器工作原理图(引用网上的一张图片) image.png

一个完整 Web 请求的详细过程:用户在浏览器中输入 URL 地址,然后浏览器如何找到服务器地址的过程,并发起数据请求;请求数据在服务器内部处理过程;最后到请求数据在服务器端处理完成后,浏览器渲染响应页面过程。
Web服务器处理过程: 接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据

在Node.js中实现一个HTTP服务器(web服务器),像处理TCP连接,解析HTTP等这些工作实际上由Node.js自带的http模块完成。通过操作http模块提供的request对象可以拿到所有HTTP请求的信息;response对象可以把HTTP响应返回给浏览器

创建基本的http服务器,可以查看这篇文章

下面简单实现一个案例:输入不同的url展示不同的页面

const http = require('http');
const port = 8080;
const server = http.createServer((request, response) => {
    const url = request.url; // 获取请求的url地址
    let content = '<h2>404 Not found!</h2>' // 设置默认的响应内容
    if(url === '/' || url === '/index.html'){
        content = '<h2>首页</h2>'
    }else if(url === '/about.html'){
        content = '<h2>关于我们</h2>'
    }
  //当收到请求时,使用 response.writeHead()  函数发送一个HTTP状态200(表示响应成功)和HTTP头的内容类型(content-type)
  response.writeHead(200, {"Content-Type": "text/html;charset=utf-8"});
  
  //调用 response.end()  完成响应,把内容发送给浏览器(客户端)
  response.end(content);
})
//设置服务器端口并进行监听
server.listen(port, () => { console.log(`服务器运行在 http://localhost:${port}/`) })

输入http://localhost:8080或者http://localhost:8080/index.html,展示如下页面: image.png

输入http://localhost:8080/about.html,展示如下页面: image.png