前端知识点回顾——koa和模板引擎

koa

基于Node.js的web框架,koa1只兼容ES5,koa2兼容ES6及以后。

const Koa = requier("koa");
const koa = new Koa();

//koa.use注册中间件(一个用来处理请求/修饰向服务器发起的请求的异步函数,参数为ctx和next)
//每一个请求都会从上往下执行,当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件。当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为。
koa.use(async (ctx, next)=>{  //ctx上下文,是对request和response对象的一个封装
    console.log(0);
    await next();  //将控制权传递给下一个中间件
    console.log(3);
});
koa.use(async (ctx, next)=>{
    await next();
    console.log(2);
});
koa.use(async (ctx, next)=>{
    console.log(1);  //当控制权传递到最后一个中间件后,又会像冒泡一样往上返回控制权
});
//0 1 2 3
koa.listen(3000);  //监听于3000端口

koa-router模块

koa-router是处理路由的模块,和koa它也是中间件模块,在它上面注册的中间件也会有控制权的传递和冒泡一样返回控制权的行为。

const Koa = requier("koa");
const Router = requier("koa-router");
const koa = new Koa();
const router = new Router();

//将router模块实例注册到koa实例上
koa.use(router.routes())
    .use(router.allowedMethods());

koa-router对路由的处理:router.method(url, 中间件1, 中间件2, ...)

//接上例
const fs = requier("fs");
router.get("/", async ctx=>{  //来自跟路由的get请求会执行这个中间件
    ctx.body = fs.readFileSync("index.html", "utf-8");  //ctx.body 响应主体
});
router.get("/demo", async ctx=>{
    ctx.body = fs.readFileSync("demo.html", "utf-8");
})

router.post("/data", async ctx=>{
    //处理post请求
})

建议将路由实例独立成一个模块,中间件独立成另一个模块,模块化处理。

中间件:

//middle.js
const fs = require("fs");
module.exports = {
    "root" : async (ctx) => {
        ctx.body = fs.readFileSync("index.html", "utf8");
    },
    "demo" : async (ctx) => {
        ctx.body = fs.readFileSync("demo.html", "utf8");
    }
}

router实例:

//router.js
const Router = require("koa-router");
const router = new Router();
const dispose = require("./middle");

router.get("/", dispose.root);
router.get("/demo", dispose.demo);

module.exports = router;

最后再加上常用功能的模块,注册到koa实例上面去:

const Koa = require("koa");
const router = require("./router");
const static = requier("koa-static");  //管理静态资源(css,js,img文件等),指定静态资源的根目录,这样在html引入文件的路径中可用根目录“/”表示指定的静态资源的根目录
const {join} = requier("path");  //合并路径
const koaBody = require("koa-body");  //可以通过ctx.request.body获得请求主体
const cors = requier("@koa/cors");  //设置允许跨域的模块

const koa = new Koa();
koa.use(static(join(__dirname, "static")))  //指定文件所处目录下的static文件夹为静态资源位置
    .use(koaBody())
    .use(cors());

koa.use(router.routes())
    .use(router.allowedMethods())
    .listen(3000, ()=>{
    console.log("开始监听3000端口");
})

模板引擎

模板引擎便于在中间件处理渲染页面(配合ctx.render方法)时给页面传参,让页面根据参数的不同而呈现不同的内容。

const Koa = require("koa");
const views = require("koa-views");  //管理模板引擎
const {join} = require("path");
const koa = new Koa();

koa.use(views(join(__dirname + '/views'), {
    extension: "pug"  //使用pug模板引擎
}));
koa.use(async ctx=>{
    await ctx.render("index", {  //将views目录下的index.pug内容渲染到页面中去
        bool: 1  //往index.pug里传参
    });
}).listen(3000, ()=>{
    console.log("start to listen at 3000 port");
})

pug模板遵循严格的缩进,具体语法见:https://pug.bootcss.com/api/getting-started.html

// index.pug
doctype html
html
    head
        meta(charset="UTF-8")
        title simple
    body
        div.box#wrap wrap内容
        div(class = bool ? "simple" : "complicated") 啦啦啦
        input( type='checkbox',name='agreement',checked )

原文地址:https://www.cnblogs.com/simpul/p/11027158.html

时间: 2024-08-29 23:10:14

前端知识点回顾——koa和模板引擎的相关文章

koa ejs 模板引擎

Koa 中使用 ejs 模板的使用 1.安装 koa-views 和 ejs 1. 安装 koa-views npm install --save koa-views / cnpm install --save koa-views 2. 安装 ejs npm install ejs --save / cnpm install ejs --save 2.引入 koa-views 配置中间件 const views = require('koa-views'); app.use(views('vie

前端学PHP之Smarty模板引擎

前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进.文字环绕以及正则表达式都可以直接使用,如果觉得不够,SMARTY还有很强的扩展能力,可以通过插件的形式进行扩充.另外,Smarty也是一种自由软件,用户可以自由使用.修改,以及重新分发该软件.本文将详细介绍Smarty模板引擎 概述 Smarty是一个php模板引擎.更准确的说,它分离了逻辑程序和外

前端学PHP之自定义模板引擎

什么是网站模板?准确地说,是指网站页面模板,即每个页面仅是一个板式,包括结构.样式和页面布局,是创建网页内容的样板,也可以理解为已有的网页框架.可以将模板中原有的内容替换成从服务器端数据库中动态内容,目的是可以保持页面风格一致 PHP是一种HTML内嵌式的在服务器端执行的脚本语言,所以大部分PHP开发出来的Web应用,初始的开发模板就是混合层的数据编程.虽然通过MVC设计模式可以把程序应用逻辑与网页呈现逻辑强制性分离,但也只是将应用程序的输入.处理和输出分开,网页呈现逻辑(视图)还会有HTML代

前端知识点回顾——Nodejs

Node.js 事件循环机制 setImmediate()是将事件插入到事件队列尾部,主线程和事件队列的函数执行完成之后立即执行setImmediate指定的回调函数,和setTimeout(fn,0)的效果差不多 process.nextTick()方法可以在当前"执行栈"的尾部-->下一次Event Loop(主线程读取"任务队列")之前-->触发process指定的回调函数.也就是说,它指定的任务总是发生在所有异步任务之前,当前主线程的末尾. 事件

前端知识点回顾——Javascript篇(六)

fetch 在原生ajax+es6promise的基础上封装的一个语法糖,返回promise对象. fetch(url, initObj) .then(res=>res.json()) .then(data=>{ //这里得到返回的json对象,可进行操作 }) .cateh(err){ console.log(err); }; //initObj { body: JSON.stringify(data), // must match 'Content-Type' header cache:

前端知识点回顾之重点篇——jQuery实现的原理

jQuery jQuery的实现原理 参考:https://blog.csdn.net/zhouziyu2011/article/details/70256659 外层沙箱和命名空间$ 为了避免声明了一些全局变量而污染,把代码放在一个"沙箱执行".jQuery具体的实现,都被包含在了一个立即执行的匿名函数构造的闭包里面,然后只暴露 $ 和 jQuery 这2个变量给外界: (function(window, undefined) { // 用一个函数域包起来,就是所谓的沙箱 // 在这

前端知识点回顾——mongodb和mongoose模块

mongodb和mongoose模块 数据库 数据库有关系型数据库(MySQL)和非关系型数据库(mongodb),两者的语法和数据存储形式不一样. mySQL 关系型数据库 类似于表格的形式,每一条数据都是以id为标识 table thead name sex age id tbody May female 18 1 Simple male 25 2 mongodb 非关系型数据库 集合,相当于表的概念,Bson,一条数据代表一个文档(数据的基本单位) { id : name : May ag

各种JS模板引擎对比数据(高性能JavaScript模板引擎)

最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,从而出现在各大型网站 Twitter.淘宝网.新浪浪微博.腾讯QQ空间.腾讯微博等.那么他们各自性能怎么样?请看下面. 通常模板引擎 baiduTemplate(百度)\artTemplate(腾讯)\juicer(淘

为什么要使用JS模板引擎

我之前在写一个输入联想控件的时候,改过好几个版本,每个版本不是因为性能不好就是因为代码凌乱而被推翻,最后用了understore模板引擎,效果有明显改善.整好这两天在研究互联网技术架构,发现很多的开发框架前端都是使用js模板引擎,感悟真的是大道至简,殊途同归啊,哈哈. 关于为什么使用js模板引擎,在博客园发现园友的一片文章<js模版引擎handlebars.js实用教程——为什么选择Handlebars.js>,该文已经做了详细解答.下面内容转自该文: 据小菜了解,对于java开发,涉及到页面