当前位置: 首页 > article >正文

Node.js——http 模块(二)

个人简介

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

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

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

文章目录

    • 前言
    • 设置 HTTP 响应报文
    • Simple Demo
    • 总结

前言

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

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


设置 HTTP 响应报文

下面,我们学习如何进行 HTTP 响应报文的设置,其实也很简单,只需要 response.xxx 调一些属性和方法即可。

  • statusCode: 设置响应状态码
  • statusMessage: 设置响应状态的描述
  • setHeader(): 设置响应头
  • write(): 设置响应体
const http = require('http');

// 创建服务对象
const server = http.createServer((request, response) => {
    // 设置响应状态码
    response.statusCode = 201;
    // 设置响应状态的描述
    response.statusMessage = 'hi';
    // 设置响应头
    response.setHeader('content-type', 'text/html;charset=utf-8');
    response.setHeader('Server', 'Node.js');
    response.setHeader('DIYHeader', 'diy header');
    response.setHeader('test', ['a', 'b', 'c']);
    // 设置响应体
    response.write('Hello, ');
    response.write('This ');
    response.write('is ');
    response.write('zahuopu');
    response.end('!');
})

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

在这里插入图片描述


Simple Demo

下面我们编写一个小 Demo,实现响应页面信息(包括 html、css 和 js),设置 MIME 类型 并进行错误处理。

const http = require('http');
const fs = require('fs');
const path = require('path');

// MIME类型(Multipurpose Internet Mail Extensions)是一种标准,用于表示文档、文件或字节流的性质和格式‌‌。
// 设置HTTP响应的 Content-Type 头部,以告诉浏览器如何处理返回的内容。
const mimes = {
    html: 'text/html',
    css: 'text/css',
    js: 'text/javascript',
    png: 'image/png',
    jpg: 'image/jpeg',
    gif: 'image/gif',
    mp4: 'video/mp4',
    mp3: 'audio/mpeg',
    json: 'application/json',
}

const server = http.createServer((request, response) => {
    // 获取请求路径
    const { pathname } = new URL(request.url, 'http://127.0.0.1');
    // 拼接完整的文件路径
    const filePath = __dirname + pathname;

    fs.readFile(filePath, (err, data) => {
        // 处理错误信息
        if (err) {
            response.setHeader('content-text', 'text/html;charset=utf-8');
            switch (err.code) {
                // 未找到
                case 'ENOENT':
                    response.statusCode = 404;
                    response.end('<h1>404 Not Found</h1>');
                // 无权限
                case 'EPERM':
                    response.statusCode = 403;
                    response.end('<h1>403 Forbidden</h1>');
                // 其他错误
                default:
                    response.statusCode = 500;
                    response.end('<h1>Internal Server Error</h1>');
            }
            return;
        }
        // 获取文件后缀名
        const ext = path.extname(filePath).slice(1);
        // 获取对应的类型
        const type = mimes[ext];
        if (type) {
            if (ext === 'html') {
                response.setHeader('content-text', type + ';charset=utf-8');
            }
        } else {
            response.setHeader('content-type', 'application/octet-stream');
        }
        // 响应文件内容
        response.end(data);
    })
})

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

index.html 文件中编写如下内容:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="./index.css" />
  </head>
  <body>
    <h2>前端杂货铺</h2>
    <script src="./index.js"></script>
  </body>
</html>

index.css 文件中编写如下内容:

h2 {
    color: orange;
}

index.js 文件中编写如下内容:

const h2 = document.querySelector('h2');
h2.style.fontSize = 20 + 'px';
h2.style.fontWeight = 200;

启动服务后,访问 9000 端口

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


总结

本篇文章我们首先学习了 HTTP 响应报文,包括设置响应状态码、设置响应状态的描述、设置响应头和响应体等;此外,我们还编写了一个 Demo,学习如何响应页面信息、认识了 MIME 并学会了如何进行错误处理等。

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


参考资料:

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

在这里插入图片描述



http://www.kler.cn/a/501664.html

相关文章:

  • [笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server
  • 基于DFT与IIR-FIR滤波器的音频分析与噪声处理
  • 信息系统项目管理-采购管理-采购清单示例
  • 数字证书管理服务
  • Servlet与JSP:Java的秘密花园入口
  • 改进萤火虫算法之七:基于自适应机制的萤火虫算法(Adaptive Firefly Algorithm, AFA)
  • (Arxiv-2023)LORA-FA:针对大型语言模型微调的内存高效低秩自适应
  • 软件系统安全逆向分析-混淆对抗
  • HTML + CSS:如何强制div内容保持一行?
  • 26个开源Agent开发框架调研总结(2)
  • 如何使用高性能内存数据库Redis
  • 基于异步IO的io_uring
  • 【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
  • HAMi + prometheus-k8s + grafana实现vgpu虚拟化监控
  • 【Spring Boot 应用开发】-01 初识
  • 夯实前端基础之CSS篇
  • Edge浏览器内置的截长图功能
  • 品牌账号矩阵如何打造?来抄作业
  • Vue3.5 企业级管理系统实战(一):项目初始搭建与配置
  • 16_Redis Lua脚本
  • uniapp实现H5页面内容居中与两边留白,打造类似微信公众号阅读体验
  • FPGA随记——时钟时序一些基本知识
  • 网工考试——网络安全
  • C#中简单Socket编程
  • 【Uniapp-Vue3】onShow和onHide钩子的对比和执行顺序
  • RabbitMQ-SpringAMQP使用介绍