当前位置: 首页 > news >正文

83 # 静态服务中间件 koa-static 的使用以及实现

静态服务中间件:koa-static

中间件可以决定是否向下执行,如果自己可以处理,那么直接处理完毕结束,如果自己处理不了,next 方法会继续向下执行

新建 public 文件夹,里面添加 index.html、style.css 文件

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>凯小默测试静态服务中间件koa-static</title><link rel="stylesheet" href="./style.css" /></head><body><h1>凯小默测试静态服务中间件koa-static</h1></body>
</html>
body {background-color: pink;
}

koa-static

npm i koa koa-static

用法:

const serve = require('koa-static');
const Koa = require('koa');
const app = new Koa();// $ GET /package.json
app.use(serve('.'));// $ GET /hello.txt
app.use(serve('test/fixtures'));// or use absolute paths
app.use(serve(__dirname + '/test/fixtures'));app.listen(3000);console.log('listening on port 3000');

业务代码 static.js 中使用 koa-static

const Koa = require("koa");
const path = require("path");
const bodyParser = require("koa-bodyparser");
// 使用自己实现的中间件
// const static = require("koa-static");
const static = require("./kaimo-koa-static");
const app = new Koa();
app.use(bodyParser());
app.use(static(__dirname));
app.use(static(path.resolve(__dirname, "public")));app.use((ctx, next) => {console.log(ctx.path, ctx.method);if (ctx.path == "/login" && ctx.method === "GET") {ctx.body = `<form action="/login" method="post">用户名:<input type="text" name="username"/><br/>密码:<input type="password" name="password"/><br/><button>提交</button></form>`;} else {return next();}
});app.use(async (ctx, next) => {console.log(ctx.path, ctx.method);if (ctx.path == "/login" && ctx.method === "POST") {ctx.body = ctx.request.body;} else {await next();}
});app.on("error", function (err) {console.log("error----->", err);
});app.listen(3000);

启动服务,访问 http://localhost:3000/index.html

在这里插入图片描述

nodemon static.js

下面实现自己的 koa-static,需要安装 mime

const path = require("path");
const fs = require("fs").promises;
const mime = require("mime");console.log("使用的是 kaimo-koa-static 中间件");
module.exports = function static(root) {return async (ctx, next) => {let filePath = path.join(root, ctx.path);try {let statObj = await fs.stat(filePath);// 判断是否是文件if (statObj.isFile()) {ctx.type = mime.getType(filePath) + ";charset=utf-8";ctx.body = await fs.readFile(filePath);} else {await next();}} catch (e) {await next();}};
};

在这里插入图片描述

在这里插入图片描述

相关文章:

83 # 静态服务中间件 koa-static 的使用以及实现

静态服务中间件&#xff1a;koa-static 中间件可以决定是否向下执行&#xff0c;如果自己可以处理&#xff0c;那么直接处理完毕结束&#xff0c;如果自己处理不了&#xff0c;next 方法会继续向下执行 新建 public 文件夹&#xff0c;里面添加 index.html、style.css 文件 …...

带讲解的自行车租赁系统,可做毕设/课设

适合人群: 马上毕业/需要毕设的同学 技术栈: 前后端分离 前端使用: Vue Element 后端使用: SpringBoot Mysql8.0 Mybatis 支付宝支付 功能截图: 分为管理员端和 普通用户端 和 维修人员端 阿里大佬亲讲 免费看地址: 见评论区...

mysql指令

1.删除表&#xff1a; drop table table_name; 2.查询表字段&#xff1a; select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAMEtable_name; 参考链接 3.切换数据库&#xff1a; use database_name 4.查看当前数据库所有表 show tables;...

【C语言】每日一题(半月斩)——day2

目录 一.选择题 1、以下程序段的输出结果是( ) 2、若有以下程序&#xff0c;则运行后的输出结果是&#xff08; &#xff09; 3、如下函数的 f(1) 的值为&#xff08; &#xff09; 4、下面3段程序代码的效果一样吗( ) 5、对于下面的说法&#xff0c;正确的是&#xf…...

电脑如何查看代理服务器IP?

许多人在使用互联网时可能会遇到需要使用代理服务器的情况。但是&#xff0c;你知道如何在电脑上查看代理服务器IP吗&#xff1f;本文将为您分享简单易懂的方法&#xff0c;帮助您轻松了解代理设置的秘密&#xff01; 代理服务器在网络世界中担任着重要的角色&#xff0c;它可…...

【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

文章目录 1. C11简介2. 统一的列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype 4. nullptr5. 范围for循环6. 智能指针7. C11STL中的一些变化8. 演示代码 1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1…...

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)

前言 书接上文【FPGA项目】沙盘演练——基础版报文收发_子墨祭的博客-CSDN博客&#xff0c;前面我们做了基础版的报文收发&#xff0c;相信对逻辑设计有了一定的认知&#xff0c;在此基础上&#xff0c;继续完善一个实际报文收发可能会遇到的一些处理&#xff1a; 报文处理握手…...

【程序员装机】自定义Edge浏览器用户目录

文章目录 前言修改Edge用户目录的批处理脚本上述批处理脚本的功能包括 总结 前言 本文将介绍Edge浏览器用户目录的批处理脚本方式修改&#xff0c;以自定义Edge浏览器的磁盘缓存目录和用户数据目录。 修改Edge用户目录的批处理脚本 以下是一个用于修改Edge浏览器用户目录的批…...

ubuntu18、20 cv_bridge 与自带opencv版本冲突问题

背景&#xff1a; nvidia tx2、xvaier 装机自带 ubuntu18 opencv4 后来我们会安装melodic的ros&#xff0c;ros中的cv_bridge 默认cv版本是3.2.0 编译带cv_bridge的代码时&#xff0c;会报错会崩溃&#xff0c;因为版本冲突了 为了解决该问题&#xff0c; 行之有效的一种…...

贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据...

原文链接&#xff1a;http://tecdat.cn/?p22702 贝叶斯回归分位数在最近的文献中受到广泛关注&#xff0c;本文实现了贝叶斯系数估计和回归分位数&#xff08;RQ&#xff09;中的变量选择&#xff0c;带有lasso和自适应lasso惩罚的贝叶斯&#xff08;点击文末“阅读原文”获取…...

css自学框架之图片懒加载

首先解释一下什么叫图片懒加载。图片懒加载是一种在页面加载时&#xff0c;延迟加载图片资源的技术&#xff0c;也就是说图片资源在需要的时候才会加载&#xff0c;就是在屏幕显示范围内加载图片&#xff0c;屏幕显示范围外图片不加载。 一、关键函数 用到的关键函数&#xf…...

RoutingKafkaTemplate,DefaultKafkaProducerFactory和 ReplyingKafkaTemplate

一、RoutingKafkaTemplate 1.1、RoutingKafkaTemplate 能做什么 RoutingKafkaTemplate可以根据目标topic名称在运行时选择生产者。 RoutingKafkaTemplate 不支持事务、execute、flush或metrics操作,因为这些操作的主题未知。 1.2、使用前提 RoutingKafkaTemplate 和 KafkaT…...

Flutter动态化开发之Fair实战

一、背景 目前移动端应用的版本更新, 最常见的方式是定期发版,无论是安卓还是iOS,都需要提交新的安装包到应用市场进行审核。审核通过后,用户在应用市场进行App的下载更新。而动态化, 就是不依赖更新程序安装包, 就能动态实时更新页面的技术。 相比动态化技术,定期发版…...

Stream流编程

流格式 Stream<T> filter(Predicate<? super T> predicate);-----> 参数&#xff1a;public interface Predicate<T> (函数式接口)----> 抽象方法&#xff1a;boolean test(T t);-----> 参数&#xff1a;public interface Consumer<T> (函…...

jenkins自动化脚本集成时钉钉消息未发送

在进行jenkins自动化脚本集成时&#xff0c;需要配置钉钉发送消息。钉钉的配置正确&#xff0c;测试钉钉消息发送成功&#xff0c;但是当构建项目时&#xff0c;却没有收到钉钉消息&#xff0c;报错如下&#xff1a; [钉钉插件]发送消息时报错: java.lang.NullPointerExceptio…...

java面试题第七天

一、java面试题第七天 1.方法重载和重写的区别&#xff1f; 方法重载&#xff1a;在同一个类中&#xff0c;不同的方法拥有同样的方法名&#xff0c;不一样的参数列表&#xff0c;这就叫做方法重载 **方法的重写&#xff1a;**描述的是父类和子类之间的。当父类的功能无法满…...

MATLAB入门-矩阵的运算

MATLAB入门-矩阵的运算 本篇文章为学习笔记&#xff0c;课程链接为&#xff1a;头歌 相关知识 常见的矩阵运算有算术运算、关系运算和逻辑运算。MATLAB中的所有变量都是以矩阵的形式存储的&#xff0c;单个变量就相当于一个1*1的矩阵。 算术运算 下面展示的是常见的矩阵之…...

[X3m]ros交叉编译

ros需要安装以下包 PYTHON_PACKAGE_LIST"lark lark-parser netifaces pyyaml ifcfg pyunicodedata " TogetheROS.Bot | TogetheROS.Bot用户手册 编译tros.b​ 1 使用docker文件​ 该部分操作均在开发机的docker内完成。 ## 创建目录 cd /mnt/data/kairui.wang/…...

【漏洞库】Fastjson_1.2.47_rce

文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- 利用工具- 漏洞环境- 漏洞扫描- 漏洞验证- 深度利用- GetShell- EXP 编写 漏洞挖掘- 寻找入口点- 指纹信息 修复建议- 漏洞修复 漏洞原理 漏洞描述 Fastjson是阿里巴巴公司开源的一款json解析器&#xff0c;其性能优越&am…...

zabbix 钉钉微信企微告警(动作操作消息内容模板)

一、环境配置 1、配置zabbix服务端 2、配置监控主机&监控项&监控模板 zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客 二、触发器 触发器的本质就是一个条件判断&#xff0c;对于不同的监控数据来说&#xff0c;我…...

阿里云国际站云服务器数据备份方法有哪些?

阿里云国际站云服务器是一种根据云计算技术的虚拟服务器&#xff0c;它能够经过互联网提供计算资源和服务。在运用云服务器的过程中&#xff0c;数据备份是非常重要的一个环节。本文将介绍云服务器数据备份的办法&#xff0c;包含手动备份、主动备份和数据同步。 一、手动备份 …...

游戏笔记本电脑可以进行 3D 建模和渲染吗?有哪些优势与缺点?

3D 建模和渲染是创建令人惊叹的数字艺术、动画和游戏体验的最流行和最广泛使用的工具之一。随着技术的进步&#xff0c;对运行这些模型的强大计算机的需求呈指数级增长。对于那些寻求强大机器来处理 3D 建模任务的人来说&#xff0c;游戏笔记本电脑已成为一个可行的选择。 游戏…...

【AI】推理系统和推理引擎的整体架构

本文主要是对 B 站 Up 主 ZOMI酱 推理系统系列视频 的理解&#xff0c;可以认为是重点笔记。 一、深度学习模型的全生命周期 相信很多人和我一样&#xff0c;刚看到深度学习模型中的推理系统或推理引擎时是一头雾水&#xff0c;因为学习 DL 时通常关注于模型的设计和训练。下图…...

k8s集群中流水线部署微服务

k8s集群中流水线发布微服务 一、流水线部署微服务部署流程 二、微服务发布流程 pipeline {agent {node {label maven}}parameters {string(name: PROJECT_VERSION, defaultValue: v1.0, description: )string(name: PROJECT_NAME, defaultValue: , description: )}environment…...

Socks5代理与网络安全:保护您的隐私与数据

在今天数字化的世界中&#xff0c;隐私和网络安全已经成为至关重要的话题。Socks5代理作为一种强大的工具&#xff0c;不仅为用户提供了隐私保护&#xff0c;还在网络安全和爬虫领域发挥着关键作用。本文将深入探讨Socks5代理的工作原理、其在网络安全中的应用&#xff0c;以及…...

2024年山东高企申报注意事项

1、分析企业技术及财务报表 分析财务数据及企业主营产品和技术点。用以确定申报材料的撰写方向。一般耗时1周左右。&#xff08;纺织厂、服装厂等传统行业面临申报中的面临研发人员比例不达标&#xff0c;研发费用不达标&#xff0c;高新技术产品比例不达标等难题。&#xff09…...

npm publish包报404,is not in the npm registry错误

1. 指定发布目标2. 登录npm&#xff0c;使用登录名发布包&#xff0c;包名命名原则“登录名/包名”&#xff0c;或 “包名” 3. 删除某一个版本npm unpublish pvfhv/eslint-config-prettier1.0.1 --force 删除后的版本不能重复使用&#xff0c;正式解释&#xff1a; Unfortun…...

pytest-基础

一.使用pytest,默认的测试用例的规则以及基础应用 1.模块名字必须已test_开头或者_test结尾 2.测试类必须以Test开头,并且不能有init方法 3.测试方法必须以test开头 示例代码 test_001.py import pytest class TestCase:def test_case(self):print("执行测试用例&quo…...

在openSUSE上开启护眼模式

色温 色温是用来衡量光源色彩时所用到的一个概念&#xff0c;单位为开尔文。热黑体辐射体与光源温度相同时的温度&#xff0c;就是该光源的色温。 显而易见&#xff0c;色温越低时&#xff0c;光源看起来越黄&#xff1b;色温越高时&#xff0c;光源看起来越蓝。下面是一些常见…...

vue基础知识十:Vue中组件和插件有什么区别?

一、组件是什么 回顾以前对组件的定义&#xff1a; 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念&#xff08;组件&#xff09;来实现开发的模式&#xff0c;在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度&#xff0c;在保持接口不…...

一个完美的网站怎么做/整合营销沟通

在使用TX2的过程中&#xff0c;我想要对一些代码进行调试&#xff0c;但是在Tx2上使用gdb进行调试&#xff0c;可视化效果比较差&#xff0c;于是想要使用嵌入式系统中的交叉编译方式。在主机上对Tx2进行刷机后&#xff0c;会自动在主机上安装Nsight软件。用这个软件可以对Tx2进…...

织梦做的网站总是被攻击/营销团队外包

yum remove php*参照右边链接&#xff1a;https://www.tecmint.com/install-php-7-in-centos-6/操作因为上文中没有安装php-fpm所以还要执行yum install php-fpm的命令这样就可以通过执行service php-fpm start启动php将php-fpm置为开机启动&#xff0c; 执行 chkconfig php-fp…...

东莞网站建设设计公司/搜索引擎排名2020

前言 pyquery库是jQuery的Python实现&#xff0c;能够以jQuery的语法来操作解析 HTML 文档&#xff0c;易用性和解析速度都很好&#xff0c;和它差不多的还有BeautifulSoup&#xff0c;都是用来解析的。相比BeautifulSoup完美翔实的文档&#xff0c;虽然PyQuery库的文档弱爆了…...

佛山禅城网站建设/新闻发稿平台

集合 1. 如何创建集合并且取出列表重复的元素&#xff08;不可重复性&#xff0c;有序性&#xff09; 方法一&#xff1a; 直接利用花括号将数据扩起&#xff0c;无k值&#xff0c;例如&#xff0c;&#xff0c;代码如下&#xff1a; ① >>> num2 [1,1,1,2,2,3,…...

做企业网站比较好的公司/百度指数排行榜

添加链接描述 开始用优先队列做超时&#xff0c;因为每次要扫描vis的数目重新入堆&#xff0c;最坏是n*nlogn 然后改用set重载大小关系&#xff0c;每次单点删除那个出现的数目可以达到nlogn复杂度 最后要注意pq重载和set的区别 #include<bits/stdc.h> #pragma GCC opti…...

中文域名注册价格/独立站seo外链平台

OpenFileDialog openFileDialog new OpenFileDialog(); //打开的文件选择对话框上的标题 openFileDialog.Title "请选择文件"; //设置文件类型 openFileDialog.Filter "文本文件(*.txt)|*.txt|全部文件(*.*)|*.*"; //设置默认文件类型显示顺序 openFile…...