首页 > 编程语言 >node.js 写一个静态目录做cdn

node.js 写一个静态目录做cdn

时间:2024-07-08 13:19:17浏览次数:8  
标签:node stat const log cdn filename return console js

/*
 * @Author: HuangBingQuan <[email protected]>
 * @Date: 2024-07-07 21:16:08
 * @LastEditTime: 2024-07-08 12:56:45
 * @FilePath: /myCdn/index.js
 */
const http = require('http');
const fs = require('fs');
const URL = require('url');
const path = require('path');

const PORT = 1024;

// 得到文件的状态
async function getStat(filename) {
    try {
        return await fs.promises.stat(filename);
    }catch {
        console.log('catch.....');
        return null;
    }
}

/**
 * 得到要处理的文件内容
 */
async function getFileInfo(url) {
    const urlObj = URL.parse(url);
    // 要处理的文件路径
    let filename = path.resolve(__dirname, urlObj.pathname.substring(1));
    let stat = await getStat(filename);
    if(!stat) {
        console.log("文件不存在");
        return null;
    }else if(stat.isDirectory()) {
        filename = path.resolve(__dirname, urlObj.pathname.substring(1), 'index.html');
        stat = await getStat(filename);
        if(!stat) {
            console.log("文件不存在");
            return null;
        }else {
            console.log(filename);
            return await fs.promises.readFile(filename);
        }
    }else {
        console.log("正常文件");
        return await fs.promises.readFile(filename);
    }
    console.log("stat", stat);
}

const handler = async (req, res)=> {
    const info = await getFileInfo(req.url);
    if(info) {
        res.write(info);
    }else {
        res.statusCode = 404;
        res.write("Resource is not exits");
    }
    res.end();
}

const server = http.createServer(handler);

server.on('listening', ()=> {
    console.log(`server listen ${PORT}`);
});

server.listen(PORT);

标签:node,stat,const,log,cdn,filename,return,console,js
From: https://www.cnblogs.com/bingquan1/p/18289705

相关文章

  • 起底:Three.js和Cesium.js,二者异同点,好比全科和专科.
    Three.js和Cesium.js是两个常用的webGL引擎,很多小伙伴容易把它们搞混淆了,今天威斯数据来详细介绍一下,他们的起源、不同点和共同点,阅读后你就发现二者就像全科医院和专科医院的关系,很好识别。一、二者的起源Three.js的起源:Three.js是由RicardoCabello(也被称为mrdoob)创建的开......
  • 一个难忘的json反序列化问题
    前言最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助。案发现场我最近在做知识星球中的商品秒杀系统,写了一个filter,获取用户请求的header中获取JWT的token信息。然后根据token信息,获取......
  • 记录npm、node等的相关错误(!!!)
    报错情况当我在试着运行奇文网盘项目的时候,文档中推荐使用node版本为12.13.1,此时我使用的是nvm,所以当即就快速的切换node版本,想要去运行它。npmi还是一如既往地报错,所以我还是一如既往地采用cnpmi来下载包(经验之谈,由于想去后端发展,所以就没关心过前端的东西)。下载好之后,飞快的......
  • Win11系统提示找不到JSC.Resources.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个JSC.Resources.dll文件(挑选合适的版本文件)......
  • JS根据json数组多个字段排序及json数组常用操作
    本文转载自:https://www.jb51.net/article/162623.htm js根据json数组多个字段排序的实现代码如下所示:1/**数组根据数组对象中的某个属性值进行排序的方法2*使用例子:newArray.sort(sortByArr(['number'],false))//表示根据number属性降序排列;若第二个参数不传递,默......
  • 前端JS特效第19集:HTML5鼠标跟随星星光标特效
    HTML5鼠标跟随星星光标特效,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml">......
  • 前端JS特效第20集:HTML5图片瀑布流带筛选功能代码
    HTML5图片瀑布流带筛选功能代码,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtml><htmllang="en"class="no-js"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,init......
  • 前端JS特效第21集:HTML5响应式多种切换效果轮播大图切换js特效代码
    HTML5响应式多种切换效果轮播大图切换js特效代码,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999......
  • 前端JS特效第22集:html5音乐旋律自定义交互特效
    html5音乐旋律自定义交互特效,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>ChimeTime™</title><linkrel="stylesheet"href="css/style.css......
  • Node.js_fs模块
     文件删除  文件重命名和移动(本质都是修改路径)文件夹操作 创建文件夹(mkdir)  读取文件夹(readdir)(打印出来是该文件夹下名称的数组形式)读取当前的文件夹(readdir) 删除文件夹(rmdir) 查看资源状态   相对路径问题bug:相对路径参照的不是......