文章目录

  • 自己动手搭建一个简单的静态资源服务器
    • 介绍
    • 一、设计到的模块
      • 备注:
    • 二、代码结构
    • 三、具体代码

自己动手搭建一个简单的静态资源服务器

介绍

​ 通过此文章的学习,可以自己使用NodeJs搭建一个简单的静态资源服务器,部署在云端后实现远程访问静态资源的目的。来实现通过网络在别处引用资源的目的。

比如你服务器有一个 名称为 avata.png 的图片,当你部署成功之后,可以使用 http://host:port/public/imgs/avata.png 的网络路径来进行访问这个图片资源。

目录结构:将脚本放入你想访问的文件夹内以后,在文件资源管理器的地址栏输入cmd,启动控制台 ,然后执行 node run 命令来启动静态资源服务器

一、设计到的模块

  1. http
  2. path
  3. fs

备注:

对中文支持不友好,访问中文路径由于浏览器会自动进行URL编码,会导致后台无法正确识别,从而导致访问不到中文路径。

不想引入额外的第三方库,所以暂时只能访问中文路径,对中文请使用拼音代替。

二、代码结构

三、具体代码

// 做一个静态资源服务器const http = require('http');
const path = require('path');
const fs = require('fs');
const port = 8848; // 要监听的端口号,可以根据自己的需要进行修改/*** 过去文件的内容,文件不存在则返回 null* @param {文件的地址栏路径} url * @returns 文件的内容*/
const getFileContent = async (filename) => {// 1. Judge whether the file existsconst stat = await getStat(filename);if (!stat) {// file does not existreturn null;} else if (stat.isDirectory()) {// file is a directory,default access /index.htmlfilename = path.resolve(filename, "index.html");// 拼接好完整路径后再次调用该方法来获取文件的内容,但应该设置好方法的出口,防止无限递归return await getFileContent(filename);}else {// Run here indicates that the file existsreturn await fs.promises.readFile(filename);}
}/*** 获取文件状态,不存在则返回 null* @param {完整文件路径} filename * @returns 文件的状态信息对象 Stat*/
const getStat = async (filename) => {try {const file = await fs.promises.stat(filename);return file;}catch (error) {return null;}
}const handler = async (req, res) => {// 如果后面跟的路径是 / 开头的,则会定位到根目录下进行查找const userPath = req.url.toString("utf-8");let filename = path.resolve(__dirname, "public", userPath.substr(1));const buffer = await getFileContent(filename);if (buffer) {res.write(buffer);} else {res.statusCode = 404;res.write("Resource not found!!!");}res.end();
};const server = http.createServer(handler);server.on('listening', () => {console.log('listen start', port);})server.listen(port);

自己动手搭建一个简单的静态资源服务器相关推荐

  1. 最简单的静态资源服务器(超级详细)

    提示:本文有参考其他前端部署相关资源,侵权请联系作者删除 目录 一.前言 二.基础知识 三.入手部署最简单的静态资源服务器 1.手写最简单的静态资源服务器:响应字符串 2.手写简单静态资源服务器: 响 ...

  2. Linux上利用nginx搭建一个简单的rtmp视频流服务器(不涉及直播)

    文章目录 Linux上利用nginx搭建一个简单的rtmp视频流服务器(不涉及直播) 一.基础环境搭建 二.构建Nginx 下载nginx-rtmp-module 安装Nginx 编译nginx,代理 ...

  3. 自己动手搭建一个简单的网站

    我准备搭建一个属于自己的网站,一方面是了解建站的知识,另一个方面是为了测试Http请求相关的内容. 建站资料 下面是建站需要的资料: 服务器:也就是高级一点的电脑,它主要用来存放网页数据: web服务 ...

  4. 一个简单的静态web服务器

    用python的socket写的一个简单多进程服务器 #-*-coding:utf-8-*- import re from socket import * from multiprocessing i ...

  5. 一个简单的静态web服务器实现

    看完tomcat原理后,想自己用java仿一个简单的tomcat,先实现一个静态的web服务器.需要的技术有java网络编程(tcp/ip协议.http协议.socket等基础知识) 源码下载链接ht ...

  6. 用centos搭建一个简单的求生之路2服务器(用于好友联机降低延迟,不包含插件)

    转自自己的社团网站 由于和好友联机玩求生之路2时经常出现mod兼容性问题和高ping值问题,游戏体验非常差,而且官方服务器并不能支持第三方地图,所以我们决定自己搭建一个服务器. 不过不知道什么原因,网 ...

  7. 求生之路寻找延迟服务器,用centos搭建一个简单的求生之路2服务器(用于好友联机降低延迟,不包含插件)...

    由于和好友联机玩求生之路2时经常出现mod兼容性问题和高ping值问题,游戏体验非常差,而且官方服务器并不能支持第三方地图,所以我们决定自己搭建一个服务器. 不过不知道什么原因,网上关于搭建l4d2服 ...

  8. DNS浅析-Bind软件的使用及搭建一个简单的DNS缓存服务器

    引入DNS软件: Bind:Berkey Information Name Domain 对数据库的支持不太好,不支持多线程 PowerDNS 性能强大 速  度块 Bind软件的配置使用 yum l ...

  9. 【原创】分布式之缓存击穿 【原创】自己动手实现静态资源服务器 【原创】自己动手实现JDK动态代理...

    [原创]分布式之缓存击穿 什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询, ...

最新文章

  1. React + Koa 实现服务端渲染(SSR)
  2. 【教程】TestComplete测试桌面应用程序教程(四)
  3. extjs 验证消息不显示
  4. LATEX调整公式、图片与正文间距离,文字间距离,调整空白大小
  5. linux 2.6.35 内核配置 usb,Linux 2.6.24.4移植到S3C2410(nano2410)之:USB
  6. 栈溢出笔记1.2 覆盖EIP
  7. 如果深入学习前端,大佬给你总结了几个技巧!
  8. 论文翻译:MichiGAN: Multi-Input-Conditioned Hair Image Generation for Portrait Editing
  9. HTTP/1 已死!
  10. 【linux】make出现遗漏分隔符
  11. ffmpeg主要数据结构及其之间的关系
  12. XPS数据分析问题收集及解答
  13. 【MCM-2017】2017年数学建模美赛题目原文及翻译-B (个人思路)
  14. 2019年最新整理:1000多套完整微信小程序源码不同行业源码集合
  15. 个人所得税纳税记录(原税收完税证明)下载方法
  16. Mac(3) Parallels Desktop 安装 Windows10专业版
  17. 基于树莓派语音合成小白避坑
  18. 原生JS 实现网易云音乐
  19. C++反射:全方位解读Lura库的前世今生!
  20. java 粒度_Java函数保留粒度

热门文章

  1. 记忆尤深的博贺港海鲜
  2. 【评测】粪便基因组 DNA 提取试剂盒(柱膜法)使用报告
  3. 万字长文测评:3款口碑炸裂的BI数据分析工具,最好用的其实是……
  4. java模拟手机浏览web_在PC上测试移动端网站和模拟手机浏览器的5大方法
  5. Segmentation Fault 错误原因总结及解决方法
  6. linux ffmpeg 合并视频文件,使用ffmpeg合并视频
  7. termite:从零开始的go语言学习生活
  8. 执行python除法的符号_python 除法
  9. SpringCloud概括
  10. Android7 WIFI系统 PNO机制流程详解和隐藏BUG修改