koa中静态文件资源中间件实现
项目实践过程中,会使用非常多的静态资源,怎样可以直接在浏览器中访问到这些静态资源
- const fs = require('fs');
 const path = require('path'); module.exports = (dirpath = "./public") => {
 return async (ctx, next) => {
 if (ctx.url.indexOf("/public") === 0) {
 //public 开头 读取文件
 const url = path.resolve(__dirname, dirpath);
 // path.basename(p, [ext])
 // 提取出用‘/’隔开的path的最后一部分,ext是过滤字符
 // path.basename('/foo/bar/baz/asdf/quux.html', '.html')
 // returns
 // 'quux'
 const fileBaseName = path.basename(url); // public
 const filepath = url + ctx.url.replace("/public", ""); //得到文件目录
 console.log(filepath); try {
 //判断是否是一个文件夹
 stats = fs.statSync(filepath);
 if (stats.isDirectory()) {
 const dir = fs.readdirSync(filepath);
 console.log(dir); // [ 'index.html', 'style.css' ] const ret = ['<div style="padding-left">'];
 dir.forEach(filename => {
 console.log(filename);
 //不带小数点的格式,就是文件夹
 if (filename.indexOf(".") > -1) {
 ret.push(
 `<p><a style="color:black" href="${ctx.url}/${filename}">${filename}</a></p>`)
 } else {
 //文件
 ret.push(`<p><a href="${ctx.url}/${filename}">${filename}</a></p>`)
 } });
 ret.push("</div>")
 ctx.body = ret.join("");
 } else {
 //访问到的是一个文件,则直接读取内容
 console.log('文件');
 const content = fs.readFileSync(filepath);
 ctx.body = content;
 } } catch (error) {
 ctx.body = "404 ,not found";
 console.log(error); }
 } else {
 //否则不是静态资源,直接去下一个中间件
 await next();
 }
 }
 }- 同时在我们的app文件中添加中间件的引用 
- const static = require('./static');
 app.use(static('./public'));- 便可以在浏览器中使用public目录来访问文件了 
 
koa中静态文件资源中间件实现的更多相关文章
- django源码分析——静态文件staticfiles中间件
		本文环境python3.5.2,django1.10.x系列 1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化,然后调用相应的设置方 ... 
- WPF中静态引用资源与动态引用资源的区别
		WPF中静态引用资源与动态引用资源的区别 WPF中引用资源分为静态引用与动态引用,两者的区别在哪里呢?我们通过一个小的例子来理解. 点击“Update”按钮,第2个按钮的文字会变成“更上一层楼”, ... 
- Django模板语言中静态文件路径的灵活写法
		如图,我们看到的时html页面中静态文件的路径,其中/static/是settings.py中的设置: 假设我们将settings.py中的/static/改变了,这样的话我们还需要将html中的/s ... 
- ASP.NET5 中静态文件的各种使用方式
		所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况 ... 
- asp .net core 静态文件资源
		前言 对静态资源的简单的一个概况,在<重新整理.net core 计1400篇>系列后面会深入. 正文 我们在加入中间件是这样写的: app.UseStaticFiles(); 默认是给w ... 
- 多War项目中静态文件的共享方案
		[原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源] 在互联网产品中,一般会有多个项目(Jar.WAR)组成一个产品线.这些WAR项目,因为使用相同的前端架构(jQuery.easyui等) ... 
- Django之静态文件,中间件,admin后台管理
		静态文件 静态文件的使用 在 网页使用的css文件,js文件和图片等叫做静态文件.1)在项目下新建静态文件夹 static. 2) 配置静态文件所在的物理目录.Settings.py STATIC_U ... 
- [Python] Django框架入门5——静态文件、中间件、上传图片和分页
		说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文 ... 
- javaweb中静态文件的处理方法
		方案一:激活Tomcat的defaultServlet来处理静态文件 在web.xml中添加: <servlet-mapping> <servlet-name>default& ... 
随机推荐
- 初识Spark程序
			执行第一个spark程序 普通模式提交任务: bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark ... 
- C#耗时计算
			System.Diagnostics.Stopwatch watch = new Stopwatch(); watch.Start(); //init();计算耗时的方法 watch.Stop(); ... 
- Oracle 数据库实现数据更新:update、merge
			工作中遇到的数据更新,学习记录. 1.使用update进行数据更新 1)最简单的更新 update tablea a set a.price=1.00 2)带条件的数据更新 update tablea ... 
- 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测
			作为天池上的新手,第一次参加天池阿里云线上的比赛,糖尿病预测, 一般的数据挖掘比赛,流程:数据清洗,特征工程(找特征,特征组合),不断的尝试的不同算法,不断调参,也可以考虑将多个模型进行线性组合 大赛 ... 
- SCRUM与XP的区别和联系
			相同点:SCRUM和XP都是敏捷开发的方法论,都体现了快速反馈,强调交流,强调人的主观能动性等基本原则,而且多数“最佳实践活动”都互相适用. 不同点:Scrum非常突出Self-Orgnization ... 
- Spring配置文件中的parent与abstract
			在看项目的Spring配置文件时,发现消息队列的配置采用了继承方式配置Bean,在这梳理总结一下. 其实在基于spring框架开发的项目中,如果有多个bean都是一个类的实例,如配置多个数据源时,大部 ... 
- js布局库
			1.viz.js The solution was that someone cross compiled Graphviz to Javascript using llvm + emscripten ... 
- mac本机svn命令使用
			公司项目用到svn,之前做版本管理用的是git. 现在对svn回顾学习了一下. 这里有一篇很好的入门教程 http://www.rubyrobot.org/tutorial/subversion-wi ... 
- css3实现 鼠标经过li时动态画边框(jq库导航)
			<!doctype html> <html> <head> <meta charset="utf-8" /> <meta na ... 
- 如何将pip更新到最新版
			通过该命令即可达到目的:python -m pip install --upgrade pip pip在Python中是非常常用的,就像node.js里面的npm一样.两者共同的作用是包的管理工具. 
