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 模块后创建并监听服务对象即可。

javascript 复制代码
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:请求头信息
javascript 复制代码
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。
javascript 复制代码
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 的内容

javascript 复制代码
parsedUrl.searchParams.get('search') // test

Simple Demo

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

javascript 复制代码
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零基础视频教程(尚硅谷 · 李强)


相关推荐
哑巴语天雨3 小时前
前端面试-网络协议篇
websocket·网络协议·http·面试·https
垣宇4 小时前
Vite 和 Webpack 的区别和选择
前端·webpack·node.js
爱吃南瓜的北瓜4 小时前
npm install 卡在“sill idealTree buildDeps“
前端·npm·node.js
翻滚吧键盘4 小时前
npm使用了代理,但是代理软件已经关闭导致创建失败
前端·npm·node.js
浪九天5 小时前
node.js的版本管理
node.js
小梁不秃捏6 小时前
HTTP 常见状态码技术解析(应用层)
网络·网络协议·计算机网络·http
浪九天7 小时前
node.js的常用指令
node.js
卑微的小鬼8 小时前
rpc和http的区别,为啥golang使用grpc 不使用http?
http·rpc·golang
fajianchen8 小时前
什么是HTTP/2协议?NGINX如何支持HTTP/2并提升网站性能?
nginx·http
元气满满的热码式9 小时前
logstash中的input插件(http插件,graphite插件)
网络·网络协议·http·elasticsearch·云原生