博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 视图Nunjucks
阅读量:5943 次
发布时间:2019-06-19

本文共 3358 字,大约阅读时间需要 11 分钟。

视频地址:

视图 Nunjucks

彩虹是上帝和人类立的约,上帝不会再用洪水灭人。

客户端和服务端之间相互通信,传递的数据最终都会展示在视图中,这时候就需要用到『模板引擎』。

什么是模板引擎?

模板引擎是为了使用户界面与业务数据分离而产生的,可以生成特定格式的文档。例如,用于网站的模板引擎会生成一个标准的 HTML 文档。

市面上常见的模板引擎很多,例如:SmartyJadeEjsNunjucks 等,可以根据个人喜好进行选择。koa-viewskoa-nunjucks-2 等支持 Koa 的第三方中间件也可以自行选择。

本项目中,我们使用 koa-nunjucks-2 作为模板引擎。NunjucksMozilla 开发的,纯 js 编写的模板引擎,既可以用在 Node 环境下,也可以运行在浏览器端。koa-nunjucks-2 是基于 Nunjucks 封装出来的第三方中间件,完美支持 Koa2

Nunjucks 介绍

首先我们需要了解 Nunjucks 的几个特性

简单语法

变量

{
{ username }} {
{ foo.bar }} {
{ foo["bar"] }}

如果变量的值为 undefinednull ,将不予显示。

过滤器

{
{ foo | title }} {
{ foo | join(",") }} {
{ foo | replace("foo", "bar") | capitalize }}

if 判断

{% if variable %}    It is true  {% endif %}  {% if hungry %}    I am hungry  {% elif tired %}    I am tired  {% else %}    I am good!  {% endif %}

for 循环

var items = [{ title: "foo", id: 1 }, { title: "bar", id: 2}]

Posts

    {% for item in items %}
  • {
    { item.title }}
  • {% else %}
  • This would display if the 'item' collection were empty
  • {% endfor %}

macro

宏:定义可复用的内容,类似于编程语言中的函数

{% macro field(name, value='', type='text') %}  
{% endmacro %}

接下来就可以把 field 当作函数一样使用:

{
{ field('user') }} {
{ field('pass', type='password') }}

更多语法内容请查阅

继承功能

网页常见的结构大多是头部、中间体加尾部,同一个网站下的多个网页,头部和尾部内容通常来说基本一致。于是我们可以采用继承功能来进行编写。

先定义一个 layout.html

          {% block head %}      
{% endblock %} {% block header %}

this is header

{% endblock %} {% block body %}

this is body

{% endblock %} {% block footer %}

this is footer

{% endblock %} {% block content %} {% endblock %}

layout 定义了五个模块,分别命名为:headheaderbodyfootercontentheaderfooter 是公用的,因此基本不动。业务代码的修改只需要在 body 内容体中进行、业务样式表和业务脚本分别在头部 head 和底部 content 中引入。

接下来我们再定义一个业务级别的视图页面:home.html

{% extends 'layout.html' %}  {% block head %}  
{% endblock %} {% block body %}

home 页面内容

{% endblock %} {% block content %} {% endblock%}

最终的 home.html 输出后如下所示:

          

this is header

home 页面内容

this is footer

安全性

请对特殊字符进行转义,防止 Xss 攻击。若在页面上写入 Hello World<script>alert(0)</script> 这类字符串变量,并且不进行转义,页面渲染时该脚本就会自动执行,弹出提示框。  

安装并运行

安装 koa-nunjucks-2:

npm i koa-nunjucks-2 -S

修改 app.js,引入中间件,并指定存放视图文件的目录 views

const Koa = require('koa')  const path = require('path')  const bodyParser = require('koa-bodyparser')  const nunjucks = require('koa-nunjucks-2')  const app = new Koa()  const router = require('./router')  app.use(nunjucks({    ext: 'html',    path: path.join(__dirname, 'views'),// 指定视图目录    nunjucksConfig: {      trimBlocks: true // 开启转义 防Xss    }  }));  app.use(bodyParser())  router(app)  app.listen(3000, () => {    console.log('server is running at http://localhost:3000')  })

在之前的项目中,视图被写在了 controller/home 里面,现在我们把它迁移到 views 中:

新建 views/home/login.html:

            

重写 controller/home 中的 login 方法:

login: async(ctx, next) => {    await ctx.render('home/login',{      btnName: 'GoGoGo'    })  },

注意: 这里我们使用了 await 来异步读取文件。因为需要等待,所以必须保证读取文件之后再进行请求的响应。

增加了 views 层之后,视图功能还不算完善,我们还需要增加静态资源目录。当然,如果能直接使用静态服务器的话更好。下一节中,我们将讲述下如何增加静态文件及美化项目视图。

下一篇:处理静态资源——指定静态文件目录,设定缓存

上一篇:iKcamp新课程推出啦~~~~~

推荐: 翻译项目Master的自述:

1.

2. iKcamp出品微信小程序教学共5章16小节汇总(含视频)

转载地址:http://dyzxx.baihongyu.com/

你可能感兴趣的文章
Adaptive Backgrounds – jQuery 自适应背景插件
查看>>
手把手教你 用 wpf 制作metro ProgressRing (Windows8 等待动画)
查看>>
编码原则:“防御式编程”再次让我快乐
查看>>
国内2大Git代码托管网站
查看>>
VS2013,asp.net网站转换为web应用程序
查看>>
深入浅出SQL Server中的死锁
查看>>
用LinqPad查看Nhibernate生成的sql语句
查看>>
Android -- 在ScrollView中嵌套ListView
查看>>
企业搜索引擎开发之连接器connector(十九)
查看>>
树状数组(Binary Indexed Tree) 总结
查看>>
我怎么会做这样的梦呢?
查看>>
发短信接口获取验证码
查看>>
springMVC3学习(二)--ModelAndView对象
查看>>
【图论】广度优先搜索和深度优先搜索
查看>>
Android开发环境搭建(图文教程)
查看>>
Linux在线用户通信
查看>>
SSH框架总结(框架分析+环境搭建+实例源代码下载)
查看>>
Mapnik读取PostGIS数据渲染图片
查看>>
javascript中使用Map
查看>>
backbonejs中的模型篇(二)
查看>>