使用Koa2进行Web开发(二)静态文件与路由

2023-11-17

静态文件处理

这里选择koa-static作为处理静态文件的中间件

const Koa = require('koa');
const app = new Koa();
const  serve = require("koa-static");
app.use(serve(__dirname+ "/static/html",{ extensions: ['html']}));
app.listen(3000);

static模块的使用也比较简单,规划好静态文件存放的路径,使用app.use挂载在应用上即可。
上面的代码中,__dirname+ “/static/html” 表示静态文件存放的路径,当接收到请求后,会在该路径下进行查找,serve还可以接收一个对象,表示查找文件的后缀名。

路由处理

在express中,路由处理的中间件是绑定在内部的,因此可以使用如下的代码

app.get(“/”,function(req,res){
    //TODO
})

在KOA中,由于移除了不必要的中间件,路由的处理同样要借助第三方模块来实现,这里使用koa-router
和express中注册路由的写法相同,router对象分别使用get和post方法来处理get和post请求。

下面是一个使用koa-router的例子

var Koa = require('koa');
var bodyParser = require('koa-bodyparser');
const router = require('koa-router')();
var app = new Koa();
app.use(bodyParser());
app.use(router.routes());
router.get('/', async (ctx, next) => {
    ctx.response.body = 
       '<h1>Index</h1> <form action="/login" method="post"> ' 
        +
        '<p>Name: <input name="name"></p>' 
        +
        ' <p>Password: <input name="password" type="password"></p> ' 
        +
        '<p><input type="submit" value="Submit"></p>' 
        +
        ' </form>';
});

router.post('/login', async (ctx, next) => {
    let
        name = ctx.request.body.name || '',
        password = ctx.request.body.password || '';

    console.log(ctx.request);
    if (name === 'koa' && password === '12345') {
        ctx.body = "Success"
    } else {
        ctx.body = "Login error"

    }
});

上面的代码中,我们定义了两个路由,接收到get请求后向前端渲染一个form表单用于登陆,当用户点击submit提交后,router接收到post请求后使用ctx.request.body
对象来解析表单中的字段,但实际上将post的请求打印出来
console.log(ctx.request);
会发现resquest对象并没有body这一字段,思考post请求的原理即可明白,由于表单提交可能划分为多个包进行传输,因此放在request对象中显然是不合理的,程序可以使用ctx.request.body来解析表单字段,是因为使用了koa-bodyparser这一模块的原因,至于该模块内部是如何实现的,读者可以自行参阅源码

{ method: ‘POST’,
url: ‘/login’,
host:{
‘localhost:3000’,
connection: ‘keep-alive’,
‘content-length’: ‘29’,
‘cache-control’: ‘max-age=0’,
origin: ‘http://localhost:3000‘,
‘upgrade-insecure-requests’: ‘1’,
‘user-agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133
Safari/537.36’,
‘content-type’: ‘application/x-www-form-urlencoded’,
accept: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8’,
referer: ‘http://localhost:3000/login‘,
‘accept-encoding’: ‘gzip, deflate, br’,
‘accept-language’: ‘zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4’,
cookie: ‘_ga=GA1.1.910420953.1491570843’ } }

因为router也是中间件,因此要使用app.use()来挂在app对象中,值得注意的是,bodypaser要在router之前加载才能生效。

koa-router同样支持定义定义多种形式的路由,下面是官网的例子

router.get('/:category/:title', function (ctx, next) {
  console.log(ctx.params);
  // => { category: 'programming', title: 'how-to-node' }
});
router.get(/^\/(.*)(?:\/|$)/, ...);
 // match all path, e.g., /hello, /hello/world
router.get(/^\/app(?:\/|$)/, ...); 
// match all path that start with "/app", e.g., /app/hello, /app/hello/world

在上面的代码中:category和:title实际上起到了get参数的作用,这种restful风格的地址传递相比使用?category=.. &title=的形式更加简洁,要获取这种形式的参数,可以使用ctx.params对象。

router.get("/delete/blog/:blogId",async(ctx,next)=>{
    await  dbAPI.deleteBlogId(ctx.params.blogId);
    await next()
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Koa2进行Web开发(二)静态文件与路由 的相关文章

随机推荐

  • 使用boost库来计算文件夹的大小

    include
  • 投资学实务 期货日志及实践总结

    我的期货交易可以分为三个阶段 摸索阶段9 27 9 30 日期 单日净盈利 累计净值 单日回撤 9 27 14370 0 9707 0 03 9 28 29670 1 0295 0 9 29 11855 1 0517 0 9 30 1647
  • Acwing-27. 数值的整数次方

    由于本题的指数是int范围 可能很大 所以需要用快速幂 Acwing 875 快速幂 中有详细介绍快速幂 点击链接即可传送 求解 https blog csdn net weixin 43844521 article details 127
  • torch.cat过程中遇到的问题

    项目场景 有关深度强化学习过程中使用torch cat遇到的问题 问题描述 在学习MEC 使用深度强化学习改变卸载率的过程中 要将action和state通过torch cat合并的时候遇到的问题 第一个问题 torch cat当中直接使用
  • 在Vim(gvim)中使用cscope

    之前已经详细的介绍了在vim中使用ctags 这篇文章我们就来详细介绍一下如何在vim中使用cscope 首先 我们还是了解一下什么是cscope 简单来讲 cscope主要用来协助浏览C C 语言 他的功能要强大于ctags 不仅支持变量
  • python基础--除法、地板除、取余

    在Python中 有两种除法 一种除法是 gt gt gt 10 3 3 3333333333333335 除法计算结果是浮点数 即使是两个整数恰好整除 结果也是浮点数 gt gt gt 9 3 3 0 还有一种除法是 称为地板除 两个整数
  • libevent涉及的知识积累

    O 1 实现单链表插入删除 阅读libevent源码时发现了linux提供的一个链表 宏定义如下 define LIST ENTRY type struct struct type le next next element struct t
  • msvcp140.dll丢失的解决方法,win10系统dll报错的解决方法

    今天 我将为大家分享一个关于msvcp140 dll丢失的解决方法 特别是针对在Windows 10系统上遇到这个问题的朋友们 在开始之前 我想先简要介绍一下msvcp140 dll文件的作用 msvcp140 dll是Microsoft
  • linux怎么修改目录的所有者,linux修改文件或目录的所有者(chown)和用户组

    chown更改文件或目录的所有者 注意 所有者 必须存在于 etc passwd 下 比如 linux修改文件或目录的所有者 chown 和用户组 更改文件或目录的所有者命令 1 新建测试文件test 命令为 touch test 2 查看
  • 由于找不到msvcp140.dll无法继续执行代码”问题的解决方法

    DLL文件对于Windows上的应用程序至关重要 因为这些文件在运行时是必需的 如果没有这些文件 或者它们已经损坏 相应的应用程序可能会变得不稳定 或者根本无法运行 现在 让我们一起探讨 由于找不到msvcp140 dll无法继续执行代码
  • html提示框延时消失,JS实现提示效果弹出及延迟隐藏的功能

    自动登录勾选提示效果 要求 鼠标移入显示提示信息框 鼠标离开 信息框消失 消失的效果延迟Document sign display inline block width 15px height 15px border 1px solid c
  • 小白的高德地图初体验(一) —— 打点

    小白的高德地图初体验 一 打点 说到高德地图 肯定要推荐官方文档 传送门 走你 小白的高德地图初体验 一 打点 小白的高德地图初体验 二 点聚合 小白的高德地图初体验 三 轨迹 小白的高德地图初体验 四 矢量图形 小白的高德地图初体验 五
  • NetBeans下载安装

    1 下载 网址 Apache NetBeans Releases 2 安装 执行exe 选择安装目录和jdk
  • qemu搭建和运行起来一个linux内核环境

    qemu搭建和运行起来一个linux内核环境 参考了博客 搭建linux调试环境 一 qemu环境搭建vexpress开发平台 Edver 博客园 嵌入式Linux之QEMU模拟器 4 使用busybox制作根文件系统 ReCclay的博客
  • 【数字图像处理】图像的几何变换

    文章目录 图像几何变换的一般思路 图像平移 图像镜像 图像转置 图像缩放 图像旋转 插值算法 最近邻插值 双线性插值 高阶插值 包含相同内容的两幅图像可能由于成像角度 透视关系乃至镜头自身原因所造成的几何失真而呈现截然不同的外观 通过适当的
  • 【类】二维dp:动态规划背包问题

    dp n m 含义就是 当有n种物品时且背包有m容量时 这个背包能产生的最大价值 状态转换关系是 dp n m dp n 1 m dp n 1 m 新物品重量 意思就是 当面对新来的一个物品时 求这个情况下 背包能产生的最大价值 相当于求下
  • GB/T 35273—2020《信息安全技术个人信息安全规范》正式发布

    GB T 35273 2020 信息安全技术个人信息安全规范 2020年3月6日 国家市场监督管理总局国家标准化管理委员会正式发布 GB T 35273 2020 信息安全技术个人信息安全规范 GB T 35273 2020 信息安全技术个
  • LeetCode 53 最大子序列和

    给定一个整数数组 nums 找到一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 示例 输入 2 1 3 4 1 2 1 5 4 输出 6 解释 连续子数组 4 1 2 1 的和最大 为 6 进阶 如果你已经实现复杂度为 O
  • Go 面试系列: Goroutine 数量是越多越好吗?设置多少会影响GC调度呢?

    Go 面试系列 Goroutine 数量是越多越好吗 设置多少会影响GC调度呢 前言 现在的大厂都开始慢慢使用Go语言了 例如字节已经把Go作为后端开发的主要编程语言 但是Go的面试题总结的比较少 于是打算开启这个专栏 一起学习一起进步 前
  • 使用Koa2进行Web开发(二)静态文件与路由

    静态文件处理 这里选择koa static作为处理静态文件的中间件 const Koa require koa const app new Koa const serve require koa static app use serve d