node js静态资源服务器代码

Node.js 和 JavaScript 表情包制作工具源码解析与实战 scripts字段定义了一系列可以通过命令来运行的脚本。这使得执行项目中常见的操作变得更加方便,比如启动开发服务器、运行测试和构建项目等。通过这种方式,你可以非常简单地定义和运行一些命令,比如通过来运行项目中的测试。 阅读详情
  • staticServer.js文件
var sys = require('sys'),
    http = require('http'),
    url = require('url'),
    path = require('path'),
    fs = require('fs'),
    mime = require('./mime').types,
    config = require('./config'),
    zlib = require('zlib'),
    utils = require('./utils');

http.createServer(function (request, response) {
    var uri = url.parse(request.url).pathname;
    var filename = path.join(__dirname + '/static', uri);

    //response.writeHead(200, { "Content-Type": "text/plain" });
    //response.write(filename);
    //response.end();

    var compressHandle = function (raw, compressMatched, statusCode, reasonPhrase) {
        var stream = raw;
        var acceptEncoding = request.headers['accept-encoding'] || "";
        var matched = compressMatched; // ext.match(config.Compress.match);

        if (matched && acceptEncoding.match(/\bgzip\b/)) {

            response.setHeader("Content-Encoding", "gzip");
            stream = raw.pipe(zlib.createGzip());

        } else if (matched && acceptEncoding.match(/\bdeflate\b/)) {

            response.setHeader("Content-Encoding", "deflate");
            stream = raw.pipe(zlib.createDeflate());
        }

        response.writeHead(statusCode, reasonPhrase);
        stream.pipe(response);
    };

    path.exists(filename, function (exists) {
        if (!exists) {
            response.writeHead(404, { "Content-Type": "text/plain" });
            response.write("404 Not Found\n");
            response.end();
            return;
        }

        var ext = path.extname(filename);
        ext = ext ? ext.slice(1) : 'unknow';
        var contentType = mime[ext] || 'text/plain';
        response.setHeader('Content-Type', contentType);

        fs.stat(filename, function (err, stat) {
            var lastModified = stat.mtime.toUTCString();
            var ifModifiedSince = "If-Modified-Since".toLowerCase();

            response.setHeader("Last-Modified", lastModified);
            response.setHeader("Server", "Node/V2");

            // add cache control
            if (ext.match(config.Expires.fileMatch)) {
                var expires = new Date();
                expires.setTime(expires.getTime() + config.Expires.maxAge * 1000);
                response.setHeader("Expires", expires.toUTCString());
                response.setHeader("Cache-Control", "max-age=" + config.Expires.maxAge);
            }

            if (request.headers[ifModifiedSince] && lastModified == request.headers[ifModifiedSince]) {
                response.writeHead(304, 'Not Modified');
                response.end();
                return;
            }
            /*
            fs.readFile(filename, "binary", function (err, file) {
            if (err) {
            response.writeHead(500, 'Internal server error', { 'Content-Type': 'text/plain' });
            response.write(err + "\n");
            response.end();
            return;
            }
            response.writeHead(200, 'OK');
            response.write(file, 'binary');
            response.end();
            });*/

            var compressMatched = ext.match(config.Compress.match);

            if (request.headers["range"]) {
                var range = utils.parseRange(request.headers["range"], stat.size);
                if (range) {
                    response.setHeader("Content-Range", "bytes " + range.start + "-" + range.end + "/" + stat.size);
                    response.setHeader("Content-Length", (range.end - range.start + 1));
                    var raw = fs.createReadStream(filename, { "start": range.start, "end": range.end });
                    compressHandle(raw, compressMatched, 206, "Partial Content");
                }
                else {
                    response.removeHeader("Content-Length");
                    response.writeHead(416, "Request Range Not Satisfiable");
                    response.end();
                }
            }
            else {
                var raw = fs.createReadStream(filename);
                compressHandle(raw, compressMatched, 200, "OK");
            }
        });
    });
}).listen(8000);

sys.puts('server running at http://localhost:8000/');
  • config.js文件

exports.Expires = {
   fileMatch: /^(gif|png|jpg|js|css)$/ig,
   maxAge: 60 * 60 * 24 * 365
};

exports.Compress = {
   match: /css|js|html/ig
};
  • utils.js文件

exports.parseRange = function (str, size) {
    if (str.indexOf(",") != -1) {
       return;
    }
    
    var range = str.split("-");
        start = parseInt(range[0], 10),
        end = parseInt(range[1], 10);

    // Case: -100
    if (isNaN(start)) {
        start = size - end;
        end = size - 1;
    }
    else if (isNaN(end)) {
        // Case: 100-
        end = size - 1;
    }
    
    // Invalid
    if (isNaN(start) || isNaN(end) || start > end || end > size) {
        return;
    }

    return {start: start, end: end};
}
  • utils.js文件

exports.types = {
   "css": "text/css",
   "gif": "image/gif",
   "html": "text/html",
   "ico": "image/x-icon",
   "jpeg": "image/jpeg",
   "jpg": "image/jpeg",
   "js": "text/javascript",
   "json": "application/json",
   "pdf": "application/pdf",
   "png": "image/png",
   "txt": "text/plain",
   "xml": "text/xml",
   "swf": "application/x-shockwave-flash",
   "wav": "audio/x-wav",
   "wma": "audio/x-ms-wma",
   "wmv": "video/x-ms-wmv",
   "svg": "image/svg+xml"
};


所有文件放同一个目录。



用Nodejs搭建服务器访问html、css、JS等静态资源文件 本篇文章主要介绍了用Nodejs搭建服务器访问html、css、JS等静态资源文件的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧 立即下载

相关推荐

《小白入门:无人机电调 ESC 的 PWM 接口特性、主流协议与使用指南》

电调是无人机的 “动力中枢”,其 PWM 接口是入门的基础,而 SBUS、DroneCAN 等协议则代表了更高阶的控制方式。小白学习时,需先掌握 PWM 的基本特性和连接方法,再根据场景选择合适的协议,同时严格遵守使用注意事项(如电源匹配、校准步骤、安全操作)。随着实践深入,逐步理解 “协议差异” 和 “系统协同”,才能让无人机更稳定、安全地飞行。

bother3000的博客 3768

【Node.js】 nodejs搭建静态资源服务器;Express框架;express基本使用;express响应客户端数据;express托管静态资源;expres

nodejs搭建静态资源服务器;Express框架;express基本使用;express响应客户端数据;express托管静态资源;expres

wusandaofwy的博客 6554

OpenCV轮廓匹配实战:5分钟搞定Hu矩形状识别(附完整代码)

本文详细介绍了使用OpenCV进行轮廓匹配的实战技术,重点讲解了Hu矩形状识别在工业质检等领域的应用。通过完整的代码示例和参数调优技巧,帮助开发者在5分钟内实现高效的形状识别,提升工业检测的准确性和效率。

nnn11的博客 675

Node.js配置服务器(3-静态资源文件夹)

适用场景:上一章我们根据客户端请求路径读取对应的html文件并返回给用户,但是这个写法存在一个问题,一般前端页面都会引入很多css层叠样式表和js脚本,当我通过服务器返回html页面时,它里面所有相对的引入路径都会变为服务器路径,这时候我们想要引入的东西服务器没有配置的话就无法引入,如果一个一个配置的话需要配置很多的路由,费事不说,还造成了代码冗余,难以阅读,这时候就需要配置静态资源。

m0_61303738的博客 2462

433M无线遥控器EV1527协议解码实战:从逻辑分析到代码优化

本文详细解析了433M无线遥控器EV1527协议的实战解码过程。从使用逻辑分析仪抓取波形、理解同步头与数据位编码原理开始,逐步深入代码实现。文章重点对比了原始定时器轮询法的痛点,并提出了基于“边沿捕获+时间戳”的优化方案,构建了高效、可移植且具备抗干扰能力的解码引擎,最后分享了跨平台移植的核心技巧。

weixin_29168813的博客 925

解决Windows 10安装语言包时遇到的0x800F0954错误

在安装Windows 10操作系统的语言包时,如果遇到错误代码0x800F0954的提示,这无疑会让许多用户感到困惑和无助。这个错误通常意味着在安装过程中遇到了一些阻碍,导致无法正常完成语言包的安装。本文将为大家详细解析这个错误代码0x800F0954,并提供一系列有效的解决方法,帮助大家顺利安装所需的语言包。

nntxthml的博客 3793

vue项目中使用node将静态资源(单文件或文件夹均可)上传阿里oss

现在因为项目需求要将静态文件上传阿里云oss来减少服务器的压力和流量,研究了一两天实现了前端直传文件夹或单文件并进行访问的操作。 配置文件oss.js: var oss = require('ali-oss'); var fs = require('fs'); var path = require('path');//解析需要遍历的文件夹 var filePath = path.resolve('需要上传的文件夹路径'); var client = oss({ accessKeyId: '自己的A

qq_37536520的博客 850

机器学习实战7-基于机器学习算法预测相亲成功率

大家好,我是微学AI,今天给大家介绍一下机器学习实战7-基于机器学习算法预测相亲成功率,随着社会的发展,大家都忙于事业,对自己的终身大事就耽搁了,相亲是一种传统的寻找伴侣的方式,随着时代的发展,相亲的方式也在不断地改变。在这个过程中,了解相亲双方的信息以及预测相亲是否成功变得越来越重要。本文将介绍如何使用随机森林算法对相亲成功进行预测,通过分析男女双方的房子、车子、长相、家庭条件、父母情况、生活习惯、学历、性格、兴趣等因素,来预测相亲是否成功。

微学AI的博客 3032

用Python验证哥德巴赫猜想:从数学题到编程实战,附完整代码与效率优化

本文详细介绍了如何使用Python验证哥德巴赫猜想,从基础实现到效率优化,包括素数判断的多种算法(如试除法、埃拉托斯特尼筛法和米勒-拉宾测试)。通过完整代码示例和性能对比,帮助读者掌握编程实战技巧,提升算法效率,适用于数学爱好者和Python开发者。

weixin_30892763的博客 687

华为od 面试八股文_前端_02_含答案

华为od 面试八股文_前端_02_含答案

MISAYAONE的博客 1998

Euro-NCAP-HWA测试流程中文版V1.1(2023发布)

在本协议中,使用了以下术语:Vehicle undertest (VUT) – 指根据本规程测试的车辆,车上有碰撞前的碰撞缓解或避免系统Global VehicleTarget (GVT) – 指本协议中使用的车辆目标,其定义见TB025—Euro-NCAP全球车辆目标规范v1.0辅助其他车辆(SOV)--指最新的 AEB VRU 测试规程中定义的 "大型障碍车辆"(而非机器人控制的平台),用于本规程中的 "切出 "测试。Time To Collision (TTC) – 指在VUT碰撞GVT之前的剩余时间

小明师兄的博客 595

Node.js中静态资源的处理

前言 在我们刚开始学习Node.js时,我们只会在页面上输出'hellow world'之类的字符串或者给客户端,只能响应一个干巴巴的html骨架。这还远远不够的,我们并没有把相关的CSS,JS这些引用的静态资源连同html一起响应给用户。 要想完成这些,似并不是个很难的问题,但这对于初学者来说却经常会犯“想当然”的错误。因此,接下来我们就通过两个简单的正反案例,来学习怎么将那些外链资源反馈给用户。 一、准备阶段 先展示一下目录结构 ...

weixin_60297362的博客 917

在ParaView中编程实现涡量可视化

综上所述,本文介绍了在ParaView中使用编程方式实现涡量可视化的方法,并提供了相应的Python代码示例。通过灵活运用ParaView的编程接口,我们可以根据特定需求定制复杂的数据可视化流程,进一步深入了解和分析流体的旋转行为。ParaView是一款强大的开源数据可视化工具,它提供了丰富的功能和灵活的编程接口,使用户能够定制数据可视化流程。你可以根据需要自定义颜色映射范围和颜色,上述代码中的RGBPoints列表中包含了两个点,分别对应涡量值为0和10时的颜色。在实际使用过程中,你需要替换代码中的。

ByteProwl的博客 1434

php静态资源服务器,Node.js之静态资源服务器实现(附代码)

本篇文章给大家带来的内容是关于Node.js之静态资源服务器实现(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。本文介绍了一个简单的静态资源服务器的实例项目,希望能给Node.js初学者带来帮助。项目涉及到http、fs、url、path、zlib、process、child_process等模块,涵盖大量常用api;还包括了基于http协议的缓存策略选取、gzip压缩优...

weixin_32001433的博客 247

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

静态文件的web服务器代码,Node.js HTTP Web 静态资源服务器代码

使用Node.js模拟一个Nginx/Apache静态文件服务器,可以直接运行HTML及JavaScript、各类图片。代码来源于网络,具体出处不详,完善类型后贡献于网络。完美支持SAE的容器。server.js文件如下(请与其它html等静态文件位于同一根目录):// 用HTTP://localhost:5050访问这个服务器// 首先加载所有需要用到的模块var http = require(...

weixin_36089954的博客 199

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【node】知识点总结

一、

zhangankang的博客 1746

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Node.js

为了提高js的格调,让js脱离浏览器也能运行,一代大神Ryan Dahl在2009年,通过分析将谷歌中V8引擎(即谷歌浏览器中的js解析器),分离出来,进行二次封装,做出了一款软件,叫node.js。所以说,node.js本质上是一个js除了浏览器之外的运行环境,使得js除了是一门客户端语言外,还是一门和Java、PHP、Ruby平起平坐的客户端语言。3.node.js让js在写前端代码的基础上,可以写后端代码,因为node.js可以构建服务器。这款软件中可以运行js代码,且不需要依赖浏览器和HTML。

今天也要学习!!的博客 1156

使用node.js做一个简单的服务器

哥们初学node.js,只是为了建一个简单的服务器,然后ceshiyi

zeroone001的专栏 861

Next.js 编译并运行

next build 是用于构建 Next.js 应用的命令,而运行构建后的应用则通过 next start。

galoiszhou的博客 833

静态文件用什么服务器,Node.js学习之静态资源服务器有什么用

Node.js学习之静态资源服务器有什么用发布时间:2020-12-16 10:56:41来源:亿速云阅读:71作者:小新小编给大家分享一下Node.js学习之静态资源服务器有什么用,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!在创建 HTTP 服务器实现了一个最简单的静态资源服务器,可以对代码进行写改造,增加文件夹预览功能,暴露出一些配置,变成一个可定制的静态资源服务器模块模块化可...

weixin_29890403的博客 493

node.js服务器静态资源处理

静态资源服务器指的是不会被服务器的动态运行所改变或者生成的文件. 它最初在服务器运行之前是什么样子, 到服务器结束运行时, 它还是那个样子. 比如平时写的 js, css, html文件, 都可以算是静态资源。下面,我将以在服务器中实现注册、登录为例并将我已注册的用户数据写到我的user.json中。

2301_76669854的博客 806

Node.js学习05:动手啦,基于node.js编写程序

在 node.js 上编写程序 REPL介绍 REPL 全称: Read-Eval-Print-Loop(交互式解释器) R 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。 E 执行 - 执行输入的数据结构 P 打印 - 输出结果 L 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。 在REPL中编写程序 (类似于浏览器开发人员工具中的控制台功能) 直接在控制台输入 node 命令进入 REPL 环境 按两次 Control + C 退

黑马程序员官方博客 504

node--IO,path,http

关于IO理解 IO:数据的传输 input 输入 output 输出 关于进程与线程,队列,线程池理解,参考我的另一篇博客:https://blog.youkuaiyun.com/qq_28835447/article/details/94121838 异步的io操作和异步的非io操作理解:只要有数据的传输都是IO操作 异步的IO操作: <link rel="styl...

aoxihu1770的博客 160

Node.js 系列-搭建静态资源服务器

什么是静态资源服务器? 那先说什么是 静态资源 , 它指的是 不会被服务器的动态运行所改变或者生成的文件 . 它最初在服务器运行之前是什么样子, 到服务器结束运行时, 它还是那个样子. 比如平时写的 js , css , html 文件, 都可以算是静态资源. 那么很容易理解, 静态资源服务器的功能就是向客户端提供静态资源. 话不多说, 开始写代码: 首先我们知道, 它先是一个 “服务器”. 那根...

li420520的博客 782

PHP_nodejs+vue编程(1)

第0章 Node介绍 0.0 回顾 JavaScript **历史及发展 ** 1995年 网景公司的布兰登开发; 1997年7月,ECMA组织发布ECMAScript 1.0版; 2007年10月发布3.1版本后不久,ECMAScript 3.1改名为 ECMAScript 5。 2008年,为Chrome浏览器而开发的V8编译器诞生 2011年6月,ECMAscript 5.1版发布,现在使用最为广泛的版本; 2015年6月,ECMAScript 6正式发布,并且更名为“

魔法革1996 235

node.js安装、配置、测试及服务器端搭建文件返回给前台响应

一、node.js的安装 安装教程很多,自己查询,安装完以后,检查一下版本确认安装成功 二、测试 文件放在桌面,向service.js写入如下代码 var http = require('http'); http.createServer(function (request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 :...

runner_123的博客 395
上一篇: Node JS 静态资源处理程序
下一篇: node的express框架安装
踏雪听雨
博客等级 码龄22年 72粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值