Bootstrap

Node.js——http 模块(一)

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🎨100个小功能 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Node.js(一)Node.js——fs(文件系统)模块
Node.js(二)Node.js——path(路径操作)模块

前言

上篇文章我们学习了 path 模块,本篇文章我们学习 Node.js 的 http 模块。

http 模块是核心模块,它提供了 HTTP 服务器和客户端功能,主要用于前后端通信。


创建 HTTP 服务

创建一个基本的 HTTP 服务也很简单,只需要导入 http 模块后创建并监听服务对象即可。

const http = require('http')

// 创建服务对象
const server = http.createServer((req, res) => {    
    // 解决响应内容中文乱码问题
    res.setHeader('content-type', 'text/html;charset=utf-8')
     // 设置响应体
    res.end('你好,Http Server')
})

// 监听端口,启动服务
server.listen('9000', () => {
    console.log('服务启动成功...')
})

在这里插入图片描述

在这里插入图片描述

请求信息

编写如下代码,启动服务后刷新 9000 网页即可在控制台中查看请求行和请求头的相关信息。

  • method:获取请求的方法(GET / POST 等)
  • url:获取请求的 url
  • httpVersion:请求 HTTP 协议版本号
  • headers:请求头信息
const http = require('http')

// 创建服务对象
const server = http.createServer((req, res) => {
    console.log('请求的方法:', req.method);
    console.log('请求的url:', req.url);
    console.log('HTTP协议版本号:', req.httpVersion);
    console.log('HTTP请求头', req.headers);
    
    // 解决响应内容中文乱码问题
    res.setHeader('content-type', 'text/html;charset=utf-8')
     // 设置响应体
    res.end('你好,Http Server')
})

// 监听端口,启动服务
server.listen('9000', () => {
    console.log('服务启动成功...')
})

在这里插入图片描述


解析请求路径

原来使用 url.parse() 来解析路径,但这种方式已被弃用;新的方式是使用 new URL() 来解析路径。

  • href: 完整的 URL 字符串。
  • protocol: 协议部分(包括末尾的冒号),如 https:。
  • slashes: 一个布尔值,表示协议部分是否包含两个斜杠(//)。
  • auth: 认证信息部分(即用户名和密码),如 user:pass,如果没有则为 null。
  • host: 主机名(包括端口号,如果有的话),如 example.com:8080。
  • port: 端口号部分(作为字符串),如 8080。
  • hostname: 主机名部分(不包括端口号),如 example.com。
  • hash: URL 中的哈希部分(包括 # 符号),如 #hash。
  • search: URL 中的查询字符串部分(包括 ? 符号),如 ?search=test。
  • query: 查询字符串部分(不包括 ? 符号),被解析为一个查询对象,如 { search: ‘test’ }。注意,这是一个 querystring 模块解析后的对象。
  • pathname: URL 中的路径名部分,如 /pathname/。
  • path: pathname 和 search 的组合,如 /pathname/?search=test。
const http = require('http');
const url = require('url');

const server = http.createServer((request, response) => {
    // 解析请求路径
    const myUrl = 'https://example.com:8080/pathname/?search=test#hash';
    const parsedUrl = new URL(myUrl);
    console.log("新方式", parsedUrl);

    console.log(parsedUrl.searchParams.get('search'));
    

    const parsedUrl2 = url.parse(myUrl);
    console.log('旧方式', url.parse(parsedUrl2));

    response.end('Hello HTTP')
})

server.listen('9000', () => {
    console.log('服务启动成功...');
});

在这里插入图片描述

使用 get() 方法查询 search 的内容

parsedUrl.searchParams.get('search') // test

Simple Demo

下面我们编写一个小练习,实现网址上输入 /login 路由显示 登录页面,输入 register 路由显示 注册页面,输入 其他路由 显示 Not Found

const http = require('http')

const server = http.createServer((request, response) => {
    // 获取请求的方法
    const { method } = request;
    // 获取请求的 url 路径
    const { pathname } = new URL(request.url, 'http:127.0.0.1');
    
    response.setHeader('content-type', 'text/html;charset=utf-8');

    if (method === 'GET' && pathname === '/login') {
        response.end('登录页面')
    } else if (method === 'GET' && pathname === '/register') {
        response.end('注册页面');
    } else {
        response.end('Not Found')
    }
})

server.listen(9000, () => {
    console.log('服务启动成功...');
})

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


总结

本篇文章我们首先学习了如何创建一个 HTTP 服务,之后认识到了一些请求信息(如: method、url、headers等),再之后我们学习了使用 url.parse()new URL() 进行路径的解析,最后编写了一个简单的 Demo 巩固了相关 API 的使用。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. Node.js教程(菜鸟教程)
  2. Node.js零基础视频教程(尚硅谷 · 李强)

在这里插入图片描述


;