koa基础应用

news2024/11/27 11:54:13

不要把koa想得太复杂,他就是一个Node框架而已。

在本地应用安装好Node和koa后,先实现一下简单的服务app.js,代码如下:

const Koa = require('koa')
const app = new Koa();
app.use(async (context) => {
    context.body = 'hello Koa'
});

app.listen(3000);

console.log('服务正在启动,端口号为:3000');

执行命令:node app.js。然后在浏览器中打开http://localhost:3000/,页面显示:hello Koa。

在这里插入图片描述

中间件的使用

什么是中间件呢?中间件,就是在请求和响应之间设置不同的关卡,做不同类型的工作。比如:

在这里插入图片描述
安装几个常见的中间,因为是在学习,所以尽量了解多个中间件。在实际开发中,根据需要安装合适的中间件即可。

koa-router 路由
koa-onerror 错误信息
koa-bodyparser 解析body的JSON
koa-logger 日志
koa-cors 跨域
koa-static 静态资源
nodemon 热更新
debug debug模式

数据库就使用MySQL。

项目的目录结构是这样:

  1. middelware,中间件;
  2. controller:控制层、业务层
  3. config:数据库等等设置文件
  4. dbhelper:SQL语句
  5. routes:路由
  6. modal:对象层

路由

前端项目有路由,后端也有路由。前端的路由是浏览器提供监听URL的相关事件,用来进行相关的处理;

后端路由:则是拿到请求对象中的URL,根据URL来执行对应的逻辑。

koa有两种路由:一种是原生路由,通过request对象的URL属性进行判断,作相应的逻辑处理;

另一种使用koa-router中间件来实现路由。

原生路由:

const Koa = require('koa')
const app = new Koa();

app.use(async (context, next) => {
    const url = context.request.url;
    let content = ''
    switch (url) {
        case '/api/get/userInfo':
            content = '用户信息的接口';
            break;
        case "/api/update/userInfo":
            content = '更新用户信息的接口';
            break;
        case '/api/del/userInfo':
            content = '删除用户的接口'break;
        default:
            content = '400:没有匹配到这个接口';
            break;
    }
});


app.listen(3000, () => {
    console.log('服务正在启动,端口号为:3000');
});

中间件路由,安装好koa-router依赖之后,首先注册一下中间件:

修改一下app.js文件:

const Koa = require('koa')
const app = new Koa();
const Router = require('koa-router');

const router = new Router();
router.get('/api/get/userInfo', async (context) => {
    context.body = '获取用户信息的接口'
});

app.use(router.routes()).use(async (context) => {
    context.body = "没有匹配的接口"
})
app.listen(3000, () => {
    console.log('服务正在启动,端口号为:3000');
});

效果如图:

在这里插入图片描述
同样,其他中间件,以同样的方法引入:

// 注册 onerror
onerror(app);

// 注册bodyparser
app.use(bodyparser());

app.use(logger());
app.use(require('koa-static')(__dirname,'public'));
app.use(cors());

静态服务器

静态服务器,就是提供一个读取静态文件、静态目录的作用。

koa也可以实现静态服务器的功能。有两种方式:一种是利用koa中间件【koa-static】;另一种使用原生的方式来实现。

在项目目录下的public文件夹。就是存放静态文件的。

在这里插入图片描述
配置如下:

const Koa = require('koa')
const app = new Koa();
const Router = require('koa-router');
const onerror = require('koa-onerror');
const bodyparser = require('koa-bodyparser');
const logger = require('koa-logger');
const cors = require('koa-cors');
const path = require('path');
const static = require('koa-static');

const staticPath = './public'

// 注册 onerror
onerror(app);

// 注册bodyparser
app.use(bodyparser());

app.use(logger());
app.use(static(path.join(__dirname,staticPath)));



const router = new Router();
router.get('/api/get/userInfo', async (context) => {
    context.body = '获取用户信息的接口'
});

app.use(router.routes()).use(async (context) => {
    context.body = "没有匹配的接口"
})


app.listen(3000, () => {
    console.log('服务正在启动,端口号为:3000');
});

这就是koa的基本配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1052880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CCF CSP认证 历年题目自练Day17

CCF CSP认证 历年题目自练Day17 题目一 试题编号: 201803-1 试题名称: 跳一跳 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱…

【Linux】——基操指令(二)

个人主页 代码仓库 C语言专栏 初阶数据结构专栏 Linux专栏 LeetCode刷题 算法专栏 目录 前言 man指令 cp 指令 mv指令 echo指令 cat指令 more指令 less指令 head和tail指令 head指令 tail指令 前言 上篇文章给大家讲解了Linux环境下的一点基操指令&#xf…

Sentinel学习(1)——CAP理论,微服务中的雪崩问题,和Hystix的解决方案 Sentinel的相关概念 + 下载运行

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍CAP理论,微…

云原生开发:从容器到微服务的全栈指南

文章目录 什么是云原生开发?1. 容器化2. 微服务架构 云原生开发的优势1. 可伸缩性2. 高可用性3. 灵活性4. 快速交付 云原生开发的1. 学习曲线2. 复杂性3. 运维挑战 云原生开发的最佳实践1. 自动化部署2. 监控和日志3. 安全性4. 弹性设计5. 文档和培训 未来展望结论 …

聊聊并发编程——并发容器和阻塞队列

目录 一.ConcurrentHashMap 1.为什么要使用ConcurrentHashMap? 2.ConcurrentHashMap的类图 3.ConcurrentHashMap的结构图 二.阻塞队列 Java中的7个阻塞队列 ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。 LinkedBlockingQueue&#xf…

给奶牛做直播之三

​一、前言 上一篇给牛奶做直播之二 主要讲用RTMP搭建点播服务器,整了半天直播还没上场,今天不讲太多理论的玩意,奶牛今天放假了也不出场,就由本人亲自上场来个直播首秀,见下图,如果有兴趣的话&#xff0…

【算法|贪心算法系列No.2】leetcode2208. 将数组和减半的最少操作次数

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

数据结构与算法_二叉搜索树

二叉搜索树可以说是二叉树的升级版,在数据的查找上,它优于普通二叉树。要让普通二叉树成为二叉搜索树,就要对于树中每个节点X,它左子树中所有节点元素的值小于X中的值,它右子树中所有节点元素的值大于X中的值。 请看下…

ElasticSearch - 基于 JavaRestClient 查询文档(match、精确、复合查询,以及排序、分页、高亮)

目录 一、基于 JavaRestClient 查询文档 1.1、查询 API 演示 1.1.1、查询基本框架 DSL 请求的对应格式 响应的解析 1.1.2、全文检索查询 1.1.3、精确查询 1.1.4、复合查询 1.1.5、排序和分页 1.1.6、高亮 一、基于 JavaRestClient 查询文档 1.1、查询 API 演示 1.1.…

面向对象特性分析大全集

面向对象特性分析 先进行专栏介绍 面向对象总析前提小知识分类浅析封装浅析继承浅析多态面向对象编程优点abc 核心思想实际应用总结 封装概念详解关键主要目的核心思想优点12 缺点12 Java代码实现封装特性 继承概念详解语法示例关键主要目的核心思想优点12 缺点12 Java代码实现…

elasticsearch+logstash+kibana整合(ELK的使用)第一课

一、安装elasticsearch 0、创建目录,统一放到/data/service/elk 1、下载安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.0-linux-x86_64.tar.gz2、解压 tar -xzvf elasticsearch-7.1.0-linux-x86_64.tar.gz3、新建用户和组…

蓝桥等考Python组别八级005

第一部分&#xff1a;选择题 1、Python L8 &#xff08;15分&#xff09; 运行下面程序&#xff0c;输出的结果是&#xff08; &#xff09;。 i 1 while i < 4: print(i, end ) i 1 1 2 30 1 2 31 2 3 40 1 2 3 4 正确答案&#xff1a;C 2、Python L8 &#…

详解分布式搜索技术之elasticsearch

目录 一、初识elasticsearch 1.1什么是elasticsearch 1.2elasticsearch的发展 1.3为什么学习elasticsearch? 1.4正向索引和倒排索引 1.4.1传统数据库采用正向索引 1.4.2elasticsearch采用倒排索引 1.4.3posting list ​1.4.4总结 1.5 es的一些概念 1.5.1文档和字段 …

排序篇(二)----选择排序

排序篇(二)----选择排序 1.直接选择排序 基本思想&#xff1a; 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 直接选择排序: ​ 在元素集合array[i]–array[…

【Idea】idea、datagrip设置输入法

https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5 下载后解压并重命名为 jbr, 然后替换对应 ide…

SpringBoot使用Docker并上传至DockerHub

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 1.系列文章2.构建docker镜像的方式3.docker操作3.1 安装docker3.2 查看docker镜像3.3 本地运行docker3.4 修改tag3.5 推送docker镜像3.6 远端server拉取d…

SPSS列联表分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件可在个人主页—…

玩转数据-大数据-Flink SQL 中的时间属性

一、说明 时间属性是大数据中的一个重要方面&#xff0c;像窗口&#xff08;在 Table API 和 SQL &#xff09;这种基于时间的操作&#xff0c;需要有时间信息。我们可以通过时间属性来更加灵活高效地处理数据&#xff0c;下面我们通过处理时间和事件时间来探讨一下Flink SQL …

信号类型(雷达)——脉冲雷达(四)

系列文章目录 《信号类型&#xff08;雷达通信&#xff09;》 《信号类型&#xff08;雷达&#xff09;——雷达波形认识&#xff08;一&#xff09;》 《信号类型&#xff08;雷达&#xff09;——连续波雷达&#xff08;二&#xff09;》 《信号类型&#xff08;雷达&…

浏览器输入 URL 并回车发生了什么

本文节选自我的博客&#xff1a;浏览器输入 URL 并回车发生了什么 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是MilesChen&#xff0c;偏前端的全栈开发者。&#x1f4dd; CSDN主页&#xff1a;爱吃糖的猫&#x1f525;&#x1f4e3; 我的博客&#xff1a;爱吃糖…