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

【koa】03-Koa第二阶段内容-路由管理和模板引擎(上篇)

阶段目标

掌握Koa的高级功能,能够构建一个功能较为完整的Web应用。

学习内容:

  1. 路由管理:学习如何使用koa-router中间件来管理路由,实现不同路径的请求处理。

  2. 模板引擎:了解如何使用模板引擎(如ejspug)来渲染HTML页面。

  3. 静态文件服务:学习如何使用koa-static中间件来提供静态文件服务。

  4. 错误处理:掌握如何在Koa中处理错误,包括全局错误捕获和中间件中的错误处理。

  5. 数据库集成:学习如何在Koa中集成数据库(如MySQLB),并实现基本的CRUD操作。(用sequelize+mysql实现)

第二阶段分为上中下篇,本篇文章是上篇,介绍第1-2点内容,中篇介绍第3-4的内容,下篇介绍第5的内容:数据库集成。

一、路由管理

在Koa中,路由管理通常使用koa-router中间件来实现。koa-router是一个强大的路由管理工具,支持RESTful API和页面路由。

 1、安装koa-router

npm install koa-router

2、 代码示范

const Koa = require('koa');
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser'); // 导入koa-bodyparser
const { name } = require('ejs');

const app = new Koa();
const router = new Router();

// 使用bodyParser中间件解析请求体
app.use(bodyParser());

// 定义路由
router.get('/', async (ctx) => {
  ctx.body = 'Welcome to the home page!';
});

router.get('/about', async (ctx) => {
  ctx.body = 'This is the about page.';
});

router.post('/submit', async (ctx) => {
  const data = ctx.request.body; // 获取请求体数据
  console.log("获得请求体数据>>>>",data);

//   ctx.body = `Received data: ${JSON.stringify(data)}`;
  ctx.body = data;
});

// 新增http方法
let obj={
    name:'zhangsan',
    age:18
}
router.put('/update', async (ctx) => {
  const data = ctx.request.body;
  console.log("获得请求体数据>>>>",data);
//   比如将obj的name和age更新为请求体的name和age
  obj.name=data.name;
  obj.age=data.age
  ctx.body = obj;
});
// 使用路由中间件
app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server is running at http://localhost:3000');
});

3、测试

3.1、 访问初始化页面

3.2、访问about页面

3.3、用api工具测试post和put请求

测试post请求

点击发送后,在终端查看打印结果

 

 测试put请求

比如这里我定义了一个obj对象,我在发送put请求的时候,将obj两个属性的值进行修改,然后返回给前端。

点击发送

注意:本篇暂时不介绍delete方法,后续介绍”数据库集成” 的时候会演示delete方法。

二、模板引擎

Koa支持多种模板引擎,如ejspug等。这里我们以ejs为例。

 1、安装ejs和koa-ejs

npm install ejs koa-ejs

2、代码示范

2.1、demo2.js

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

const app = new Koa();
const router = new Router();

// 配置ejs模板引擎
ejs(app, {
  root: __dirname + '/views', // 模板文件夹路径
  layout: false, // 是否使用布局文件
  viewExt: 'html', // 模板文件扩展名
  cache: false, // 是否缓存模板
  debug: false // 是否开启调试模式
});

// 定义路由
router.get('/', async (ctx) => {
  await ctx.render('index', { title: 'Home Page' });
});

router.get('/about', async (ctx) => {
  await ctx.render('about', { title: 'About Page' });
});

// 使用路由中间件
app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server is running at http://localhost:3000');
});

2.2、在views文件夹中创建两个模板文件

PS:注意文件的目录以及位置

 

这里为了方便演示,就不涉及复杂的html代码

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>
        <%= title %>
    </title>
</head>

<body>
    <h1>Welcome to the <%= title %>
    </h1>
</body>

</html>

about.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>
        <%= title %>
    </title>
</head>

<body>
    <h1>This is the <%= title %>
    </h1>
</body>

</html>

3、测试

启动服务器 node demo2.js

注意:尽可能将不同代码示范写在不同文件下。

  • 比如路由管理的代码示范,我就写在state2/demo1.js
  • 模版引擎的代码示范,我就写在state2/demo2.js
  • 模板引擎用到的view文件夹以及views/index.html和views/about.html。

知道自己的代码写在什么位置,启动服务器的时候就不会混淆。

  • 访问http://localhost:3000/,渲染index.html模板,显示Welcome to the Home Page

  • 访问http://localhost:3000/about,渲染about.html模板,显示This is the About Page

 

大家可以尝试给模板引擎加点html代码和css样式,展示效果就会更好看一点。

四、小结

这篇文章介绍了koa专栏第二阶段的“路由管理”和“模板引擎”,文章的代码示范就是起到一个“抛砖引玉”的作用,大家可以根据自己的需求进行补充修改。

接下来的中篇,我们即将介绍第二阶段的第3-4的内容,敬请期待吧~

关注我,及时了解最新文章消息。

相关文章:

  • 【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】
  • SQL 优化经历:从 30248.271s 到 0.001s
  • stm32mp15x 之 M4 使用 canfd
  • SHEIN的迁移与无奈
  • STM32H743ZIT6 FreeRTOS CMSIS_V2 Lwip DP83848/LAN8720 最新HAL V1.12.1版本 AC6编译器,速通。
  • OpenAI 的变化对行业意味着什么?
  • 青少年编程与数学 02-009 Django 5 Web 编程 18课题、静态文件
  • 【力扣】108.将有序数组转换为二叉搜索树
  • 深度学习03 卷积神经网络CNN
  • 从零创建一个 Django 项目
  • vue3+elementplus新建项目
  • ASUS/华硕 全系列原厂系统 家庭版 专业版系统 工厂文件 带ASUS Recovery恢复
  • [HarmonyOS]鸿蒙(添加服务卡片)推荐商品 修改卡片UI(内容)
  • SQLite Select 语句详解
  • Python Cookbook-1.19 检查字符串中的结束标记
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析③】
  • haproxy实现MySQL服务器负载均衡
  • Navicate数据库连接工具的下载与安装,附带使用(连接MySQL,建表、增删改查)
  • 云原生(五十五) | ECS中自建数据库迁移到RDS
  • 利用租用的GPU进行训练
  • 遭“特朗普关税”冲击,韩国今年经济增长预期“腰斩”降至0.8%
  • 日本前卫艺术先驱群展上海:当具体派相遇古树古宅
  • 反犹、资金与抗议:特朗普的施压如何撕裂美国大学?|907编辑部
  • 220名“特朗普币”持有者花1.48亿美元,获邀与特朗普共进晚餐
  • 商务部召开外贸企业圆桌会:全力为外贸企业纾困解难,提供更多支持
  • 【社论】人工智能将为教育带来什么