http模块-通过创建的服务器将本地文件转换成web资源

news2024/11/17 23:31:34

案例-通过创建的服务器将本地文件转换成web资源

  • 目的:将本地文件转换成web资源
  • 思路:将文件实际存放的地址作为每个资源的请求url地址。
  • 大致流程:
    浏览器–请求->自己写的web服务器–读文件->磁盘目录–读取完毕->自己写的web服务器–响应->浏览器
    服务器所读取到的文件内容是字符串,通过res.end()方法响应给客户端,客户端请求回来的不是具体的文件,而是文件中存储的字符串,服务器其实就是充当一个字符串的搬运工。
  • 实现步骤
    • 导入需要的模块
    • 创建基本的web服务器
    • 将资源的请求url地址映射为文件的存放路径(需要用到之前学的path模块的知识)
    • 读取文件内容并响应给客户端(需要用到之前学到的fs模块的知识)
    • 优化资源的请求路径

实现代码

实现代码在最后

  • 首先在终端输入 node 文件名.js命令运行代码启动服务器,如下

  • 根据代码,我们 有两种方式 可以访问,第一种是请求路径为/,因为我们已经在代码中输入了路径,因此直接打开该网址即可,如下
    在这里插入图片描述

  • 然后是第二种,请求路径不为/,我们直接输入要请求的文件/test.html,因为在代码中我们已经拼接其上层路径,如下

  • 可以右键点击页面,选择检查,查看页面源代码

//导入http,path和fs模块
const http = require('http')
//用来读取文件
const path = require('path')
//用来处理文件路径
const fs = require('fs')

//创建web服务器
const server = http.createServer()

//监听web服务器的request事件
server.on('request', (req, res) => {
  //获取到客户端请求的url地址,该url类似于我们上一章,我们在http://127.0.0.1后面添加了/about.html
  //变成了http://127.0.0.1/about.html,那获取到的url即/about.html,使用后面的路径拼接方法即可得到完整的路径
  const url = req.url
  //将请求到的url地址映射为本地文件的存放路径,path.join()方法用于路径拼接,__dirname表示当前代码文件所处文件的路径
  //const fpath = path.join(__dirname, url) //未优化的路径拼接
  //优化后的路径拼接
  let fpath = ''
  if (url === '/') {
    //如果请求的路径是/,则手动指定文件的存放路径,我需要获取的文件资源test.html存放在当前目录的test文件夹内
    fpath = path.join(__dirname, './test/test.html')
  } else {
    //若请求的路径不为/,则动态拼接文件的存放路径
    fpath = path.join(__dirname, './test', url)
  }

  //根据映射过来的文件路径读取文件
  fs.readFile(fpath, 'utf8', (err, dataStr) => {
    //读取文件失败后向客户端响应固定的错误消息
    if (err) {
      return res.end('404 Not found.')
    }
    //读取文件成功后将读取成功的内容响应给客户端
    res.end(dataStr)
  })
})

//启动服务器
server.listen(80, function () {
  console.log('Server listen at http://127.0.0.1')
})

完成!!😊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1476291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JWT基于Cookie的会话保持,并解决CSRF问题的方案

使用JWT进行浏览器接口请求,在使用Cookie进行会话保持传递Token时,可能会存在 CSRF 漏洞问题,同时也要避免在产生XSS漏洞时泄漏Token问题,如下图在尽可能避免CSRF和保护Token方面设计了方案。 要点解释如下: 将JWT存入…

推荐一款桌面端redis连接工具, redis desktop manager替代品——another redis desktop manager

下载地址 Another Redis Desktop Manager | 更快、更好、更稳定的Redis桌面(GUI)管理客户端,兼容Windows、Mac、Linux,性能出众,轻松加载海量键值 封面对比 对比redis desktop manager ,ui上有巨大的改进 但是redis desktop ma…

抖音视频评论批量下载软件|抖音数据抓取工具

随着业务需求的增长,抖音视频的下载需求也日益增加。传统的方式是通过逐个复制粘贴分享链接来下载视频,这种操作效率低下且耗时费力。为了解决这一问题,我们开发了一款基于C#的抖音视频评论批量下载软件,旨在实现通过关键词自动批…

网络爬虫的危害,如何有效的防止非法利用

近年来,不法分子利用“爬虫”软件收集公民隐私数据案件屡见不鲜。2023年8月23日,北京市高级人民法院召开北京法院侵犯公民个人信息犯罪案件审判情况新闻通报会,通报侵犯公民个人隐私信息案件审判情况,并发布典型案例。在这些典型案…

【物联网应用案例】智能农业应用案例

随着物联网 (IoT) 的广泛应用,各种互联设备已经深度融入我们的生活,涵盖了健康与健身、家庭自动化、物流运输以及智慧城市和工业物联网等多个领域。因此,将物联网、联网设备和自动化技术应用于农业,是十分符合时代发展需求的&…

vue3 开发记录

1.引入nprogress插件,显示未声明文件 无法找到模块“nprogress”的声明文件。 解决方法: vite-env.d.ts // 解决引入模块的报错提示 declare module "nprogress";2.在 .evn 文件中创建了自定义环境变量 VITE_APP_BASE_URL 但在项目中使用时出…

Real-time object detection and 3D scene perception in self-driving cars

摘要 可靠的城市自动驾驶取决于车辆感知和导航环境的能力。本论文的研究重点是设计并实现一个基于视觉的NUSTAG自动驾驶汽车感知系统。主要任务是使用立体相机馈送来估计汽车、自行车和行人的位置,从而实现3D边界框估计和深度感知。此外,使用2D对象检测…

SpringBoot集成EasyExcel快速人们

目录 1.背景介绍 2.EasyExcel的使用 1.添加依赖 2.相关代码准备 1.实体类 2.ExcelUtil工具类 3.写入控制类 1.背景介绍 EasyExcel 是阿里巴巴开发的一款基于 Java 的专业化 Excel 操作工具,主要用于在 Java 应用程序中快速、高效地读写 Excel 文件。EasyExce…

第二周opencv

一、边缘检测算子 边缘检测算子是用于检测图像中物体边界的工具。边缘通常表示图像中灰度值或颜色发生显著变化的地方。边缘检测有助于识别图像中的物体形状、轮廓和结构。这些算子通过分析图像的灰度或颜色梯度来确定图像中的边缘。 1、Roberts 算子 通过局部差分计算检测边缘…

Github 2024-02-28 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-02-28统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5Rust项目2Zig项目1JavaScript项目1C项目1 免费API集合列表 创建周期:2901 天开发语言…

C++观察者模式代码实例

文章目录 C观察者模式代码实例一C观察者模式代码实例二 C观察者模式代码实例一 下面是一个简单的C观察者模式的实现示例,这里仅给出核心代码框架,完整的工程应包含对应的头文件声明及必要的#include指令等。 // 观察者接口(Observer&#x…

.net 在ubuntu下动态写入 中文字乱码 解决:ubuntu下添加中文字库

.net 在ubuntu下动态写入图片水印 中文字乱码 解决:ubuntu下添加中文字库 1.安装字体命令 sudo apt install -y fontconfig2.查看已安装的字体 (1)查看linux已安装字体 fc-list(2)查看linux已安装中文字体 fc-li…

内存函数(memcpy/memmove/memcmp/memset)

目录 memcpymemcpy函数的模拟实现 memmovememmove函数的模拟实现 memcmpmemset memcpy void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置这个函数在遇到 ‘\0’ 的时候…

实战Kafka的部署

目录 一、环境准备 二、安装配置jdk8 (1)Kafka、Zookeeper(简称:ZK)运行依赖jdk8 三、安装配置ZK (1)安装 (2)配置 四、配置Kafka (1)配置…

day08_面向对象基础_内存关系

零、今日内容 一、作业 二、面向对象 一、作业 package com.qf.homework;import java.util.Arrays;/*** --- 天道酬勤 ---** author QiuShiju* date 2024/2/28* desc*/ public class Homework {public static void main(String[] args) {test();}//写一个方法 用于合并两个int…

golang 泛型详解

目录 概念 ~int vs .int 常见的用途和错误 结论: 概念 Go 在1.18 中添加了泛型,这样Go 就可以在定义时不定义类型,而是在使用时进行类型的定义,并且还可以在编译期间对参数类型进行校验。Go 目前只支持泛型方法,还…

无源蜂鸣器驱动实验

1.原理 计划是,生成不同的7个频率控制蜂鸣器发声,每个音调发声0.5秒。 50MHZ计数0.5秒,50MHZ一个周期20ns,要计数0.5秒 ,0.5/0.000_000_02s25000_000个时钟周期。因为是从0开始计数,所以计数的最大值是0-24…

docker版本 jenkins配置gitlab自动部署

前端项目 Build steps pwd npm config set registry https://registry.npm.taobao.org npm -v node -v #npm install npm run build:prod tar -czvf QASystem.tar.gz distpwd cd /data/zhouxy37/vue_deploy tar -zxvf QASystem.tar.gz sudo mv dist QASystem cp -r QASyste…

K8S常用kubectl命令汇总(持续更新中)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

NGINX的重写与反向代理机制解析

目录 引言 一、重写功能 (一)if指令 1.判断访问使用的协议 2.判断文件 (二)return指令 1.设置返回状态码 2.返回指定内容 3.指定URL (三)set指令 1.手动输入变量值 2.调用其它变量值为自定义变…