koa --- 监听路由,并使用模板引擎渲染显示

使用路由

  • /Koa实战/routes/index.js
const Router = require('koa-router');
const router = new Router();router.get('/', ctx => {ctx.body = 'index';
});module.exports = router
  • /Koa实战/routes/users.js
const Router = require('koa-router');
const router = new Router({prefix:/users‘});router.get('/', ctx => {ctx.body = 'user';
});module.exports = router
  • 使用: /Koa实战/index.js
const index = require("./routes/index");
const users = require("./routes/users");
app.use(index.routes());
app.use(users.routes());
  • 说明:
  1. new Router(prefix, '/users'): 是给请求的路径加一个请求前缀,即url请求 ‘/users’,在本地只需使用 app.get('/')即可
  2. 使用时,先导入,然后使用’koa-router’的固定语法app.use(xxx.routes())来将自己的模块变为中间件

使用模板引擎

  • npm i koa-hbs@next -S
  • /Koa实战/routes/index.js
const hbs = require("koa-hbs");
app.use(hbs.middleware({viewPath: __dirname + '/views',   // 视图根目录defaultLayout: 'layout',    // 默认布局页面partialsPath: __dirname + '/views/partials',disableCache: true    // 开始阶段不缓存
}));
  • 参数说明:
  1. viewPath: __dirname + '/views': 定义了视图的根目录为 ‘/views’
  2. defaultLayout: 'layout': 会将 /views/layout.hbs 作为默认布局
  3. router.get('/', async ctx=>{await ctx.render('index')}): 表示,用/views/index.hbs 代替 /views/layout.hbs 中的 ‘{{body}}’

监听users路由,并使用koa-hbs渲染

  • 以下代码可以实现,node后端监听 ‘localhost:3000/users’
const Router = require('koa-router');
const router = new Router({ prefix: '/users' });router.get('/', async ctx=>{await ctx.render("users",{title: "用户列表",subTitle: "handlers语法",isShow: true,username: "Jerry",users:[{ username: "tom", age: 20 }, { username: "jerry", age: 21 }]})
})module.exports = router;
  • 说明:
  1. await ctx.render("users", params): 使用users.hbs代替 layout中的{{body}}部分
  2. 能够使用await ctx.render的原因是,做了如下配置:
const hbs = require("koa-hbs");
app.use(hbs.middleware({viewPath: __dirname + '/views',defaultLayout: 'layout',partialsPath: __dirname + 'views/partials',disableCache: true
}))

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

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

相关文章

公共平台服务治理与鉴权

问题 解决问题 鉴权 注册 管理 总结聊一聊最近了解的公司服务治理平台,主要是思想,理念,而不是一种技术或框架。整个平台设计,融入了OAUTH2认证,融入了微服务思想,帮助公司各系统在复杂的IT架构下&#xff…

Java 试题五

Java 试题五 1、运行时异常与一般异常有何异同 答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,…

【初赛】概率与期望学习笔记

一、事件 1、单位事件、事件空间、随机事件 在一次随机试验中可能发生的不能再细分的结果被称为单位事件,用 $ E $ 表示。在随机试验中可能发生的所有单位事件的集合称为事件空间,用 $ S $ 来表示。例如在一次掷骰子的随机试验中,如果用获得的…

koa --- 扩展hbs方法

moment 是一款常用的处理时间的库传入 1999-03-01T16:00:00.000Z YYYY/MM/DD输出 1999/03/02 const moment require(moment);const myDatePattern (date, pattern) >{return moment(date).format(pattern) } 给扩展hbs功能. 放在 utils/helper.js 下方便管理 const hb…

go系列 锁的初识

Go基础之锁的初识 当我们的程序就一个线程的时候是不需要用到锁的,但是通常我们实际的代码不会是单个线程的,所有这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? 当我们多个线程在读相同的数据的时候则是需要加锁…

Java 试题六

Java 试题六 1、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List。Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 2、Set里…

node --- 实现session认证.

跨域认证的问题 互联网服务离不开用户认证.一般流程如下: 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。 3、服务器向用户返回一个 session_id&…

回信,我的好朋友王一涵

好了,不拖了,沏一杯咖啡,把信写完。因为再拿好吃的贿赂你,贿赂不起了—— 一个胖子可以吃穷我的。 王一涵凹,不得了不得了。微胖肉质女生,关于体重我就不提了,只有我知道嘿嘿嘿,在我…

编写基于Property-based的单元测试

编写基于Property-based的单元测试 作为一个开发者,你可能认为你的职责就是编写代码从而完成需求。我不敢苟同,开发者的工作是通过软件来解决现实需求,编写代码只是软件开发的其中一个方面,编写可靠的软件和产出有价值的代码更加重…

树链剖分+线段树 单点修改 区间求和 模板

马上要去西安打邀请赛了&#xff0c;存下板子 首先是vector存图的&#xff1a; #include<bits/stdc.h> using namespace std; #define ll long long #define lson l,m,rt<<1 #define rson m1,r,rt<<1|1 #define mid int m (l r) >> 1 const int M …

koa --- seesion实现登录鉴权

koa vue session 实现一个简单的登录逻辑 /login component/login-session.html <!DOCTYPE html><head><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script src"https://unpkg.com/axios/dist/axios.…

BZOJ2216: [Poi2011]Lightning Conductor

第一道此类的题&#xff0c;所以这是一篇假的博客&#xff0c;定理不会证明不理性 也不一定对 我是从这篇博客看的 很显然是让你求 p[i] max{a[j] sqrt(i - j)} - a[i] 就是 max{a[j] sqrt(|i - j|)} 这是一个 1D/1D 动态规划 考虑对于绝对值的情况不好做&#xff0c;那就…

HNOI2018游记

HNOI2018游记 day 0 上午稍微写了下题保持手感,然后看了一下套路,感觉不会的还是不会. 下午去划水在湖面上被吹成傻逼... 感觉没有联赛前那么紧张了,应该是联赛考挂了的原因吧.. day1 早上大概7:40就到了考场,和同学聊了一会儿天,看了看配置就进去了. 进去之后敲配置没有一遍对…

Java 试题七

Java 试题七 1、java中有几种类型的流&#xff1f;JDK为每种类型的流提供了一些抽象类以供继承&#xff0c;请说出他们分别是哪些类&#xff1f; 答&#xff1a;字节流&#xff0c;字符流。 字节流继承于InputStream、OutputStream&#xff0c; 字符流继承于Reader、Writer…

flume快速入门及应用

 Flume 简介 Flume 的安装与配置 Fumne 部署   Flume 是 Cloudera 提供的一个高可用、 高可靠、 分布式的海量日志采集、 聚合和传输的系统。 Flume 支持定制各类数据源如 Avro、 Thrift、 Spooling 等。 同时 Flume提供对数据的简单处理&#xff0c; 并将数据处理结果…

koa --- jwt实现最简单的Token认证

HTML 有如下html: 先看代码后挑重点来说明: <!DOCTYPE html><head><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script src"https://unpkg.com/axios/dist/axios.min.js"></script></…

python基础之常用的高阶函数

前言 高阶函数指的是能接收函数作为参数的函数或类&#xff1b;python中有一些内置的高阶函数&#xff0c;在某些场合使用可以提高代码的效率&#xff0e; map() map函数可以把一个迭代对象转换成另一个可迭代对象&#xff0c;不过在python3中&#xff0c;结果都是一个map对象&…

Java 试题八

Java 试题八 1、java中有几种方法可以实现一个线程&#xff1f;用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用&#xff1f; 答&#xff1a;有两种实现方法&#xff0c;分别是继承Thread类与实现Runnable接口&#xff1b;用synchronized关键字修饰同步方法…

bzoj2957 奥妙重重的线段树

https://www.lydsy.com/JudgeOnline/problem.php?id2957 线段树的query和update竟然还可以结合起来用&#xff01; 题意&#xff1a;小A的楼房外有一大片施工工地&#xff0c;工地上有N栋待建的楼房。每天&#xff0c;这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗…

koa --- 使用Github OAuth登录

准备 登录github选择右上角的setting Developer settings -> OAuth Apps -> Register a new application 填入基本信息 点击绿色的按钮,可以看见 client_id 和 client secret 理清思路: 开始时,一个登录的连接,点击连接.后台监听登录(/login)路由,然后重定向到github…