Simonzhangs' blog Simonzhangs' blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Simonzhangs

前端学习探索者
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

    • 《Node教程》笔记
    • Node基础
    • Koa框架基础
    • Nunjucks模板入门
      • GET 请求数据
      • POST 请求
    • nunjucks模板语法
    • 基于koa与nunjucks实现cookie与session
    • nodejs递归读取所有文件
    • moduleexports和exports区别
  • 博客搭建

  • Ajax

  • 计算机网络

  • 计算机编译原理

  • 涨知识

  • 技术
  • Nodejs
simonzhangs
2022-04-01
目录

Nunjucks模板入门

# 一、为什么使用模板引擎

在Koa创建服务器时[/pages/ce4ac3/],采用路由根据用户请求不同路径响应不同的页面,但是页面内容是直接通过模板字符串的方式返回给浏览器的,这样开发方式并不好,开发中更希望能够直接发送html页面。

可以通过模板引擎来解决这个问题,模板引擎可以直接设置响应的html页面,并且可以把后台数据绑定到模板中,然后返回给客户端,这里学习使用的是nunjucks。

# 二、安装nunjucks

在koa框架下安装nunjucks需要两个第三方模块:

  • koa-views: 负责配置koa的模块引擎
  • nunjucks: 下载模板引擎
npm install --save koa-views
npm install --save nunjucks
1
2

# 三、配置模板引擎

引入koa、koa-views、koa-router 和 nunjucks:

const Koa = require('koa');
const views = require('koa-views');
const router = require('koa-router')()
const nunjucks = require('nunjucks')

const app = new Koa();
1
2
3
4
5
6

通过use引用中间件,并通过koa-views指定使用的模板引擎以及模板引擎的文件路径:

app.use(views(__dirname + '/views', {
    map:{html: 'nunjucks'}
}))
1
2
3

然后新建views文件夹,在文件夹中新建index.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>{{ title }}</h1>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12

再通过app.use() 中的render来渲染模板文件

app.use(async ctx => {
    await ctx.render('index',{
        title: '模板'
    });
})
1
2
3
4
5

render的第一个参数是路径文件((默认路径就是koa-views来设置的),第二个参数是可以传递给模板的变量(模板中需要用{{}}来获取)

也可以通过路由来实现页面的跳转:

router.get('/', async ctx => {
    await ctx.render('index',{title:'首页'})
})

router.get('/video', async ctx => {
    await ctx.render('index', {title:'视频'})
})
1
2
3
4
5
6
7

这样可以实现请求不同路径时,渲染的虽然是一个页面,但是绑定不同的数据。

# 四、处理表单数据

# GET 请求数据

GET请求表单数据时候,请求数据信息会暴露在浏览器的地址栏,一般不用于密码类表单,这里仅仅是为了练习使用。

首先修改views/index页面,添加表单元素:

<form action="/login">
        <input type="text" name="username" id="">
        <input type="password" name="password" id="">
        <input type="submit" value="登陆">
</form>
1
2
3
4
5

然后增加登陆路由:

router.get('/login', async ctx => {
    let username = ctx.query.username;
    let password = ctx.query.password;
    await ctx.render('login', {
        username,
        password
    })
})
1
2
3
4
5
6
7
8

同时需要在views文件下新建login.html模板,用来显示请求成功页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>用户名:{{username}}</p>
    <p>密码:{{password}}</p>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13

# POST 请求

将views/index中表单改为post请求方法;

同时在服务端设置post路由,由于ctx.query只能获取get请求的参数,因此需要下载并引入koa-parser模块:

const parser = require('koa-parser')
app.use(parser());
1
2

再设置post对应路由:

router.post('/login', async ctx => {
    let username = ctx.request.body.username;
    let password = ctx.request.body.password;
    await ctx.render('login', {
        username,
        password
    })
})
1
2
3
4
5
6
7
8
编辑 (opens new window)
上次更新: 2022/04/01, 21:54:01
Koa框架基础
nunjucks模板语法

← Koa框架基础 nunjucks模板语法→

最近更新
01
一些有意思的类比
06-16
02
the-super-tiny-compiler解析
06-06
03
计算机编译原理总概
06-06
更多文章>
Theme by Vdoing | Copyright © 2021-2022
蜀ICP备2021023197号-2
Simonzhans | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜