Node——Nunjucks模板入门
2022-08-03 09:57:03
97
{{single.collect_count}}

一、模板引擎概述

之前我们通过Koa创建了一个web服务器,并可以根据用户请求路径的不同响应不同的页面,但是每一个页面的内容都是通过字符串的方式给送给浏览器的,这样的开发方式并不友好,我们更希望直接发送html页面。

模板引擎可以解决这个问题,通过模板引擎,可以直接设置响应的html页面,并且可以把后台数据绑定到模板中,然后发送给客户端。

目前市面上有很多模板引擎,这里我们选择一个功能完善,又容易上手的模板引擎:nunjucks

二、安装nunjucks

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

  • koa-views:负责配置koa的模板引擎

  • nunjucks:下载模板引擎

执行命令安装这两个模块

npm i --save koa-views
npm i --save nunjucks

三、配置模板引擎

//server.jsconst Koa = require("koa");const nunjucks = require("nunjucks");const views = require("koa-views");const app = new Koa();app.use(views(__dirname + '/views', {//将使用nunjucks模板引擎渲染以html为后缀的文件。map: { html: 'nunjucks' } }));app.use(async ctx => {//render方法渲染模板,第二个参数可以给模板传递参数await ctx.render("index",{title:"我的第一个模板"}) })app.listen(3000, () => {console.log("server is running");}) 

四、结合路由渲染模板

结合之前路由的内容,制作一个有两个页面的网站,功能如下:

核心功能代码如下所示:

// 首页router.get("/", async ctx => {await ctx.render("index", { title: "首页" })})// 分页router.get("/video", async ctx => {await ctx.render("index", { title: "视频" })})

五、处理表单数据

表单概述

  • action属性:指定表单提交数据的路径

  • method属性:指定表单提交数据的请求方法,请求方法包括get、post。

form标签设置完成之后,要对表单空间进行设置

  • input.name属性:指定数据传输的字段

  • input.type="submit":指定提交按钮,点击后提交表单数据

获取get请求的数据

直接通过ctx.query可以获取get请求的数据,实例代码如下所示:

​// 获取请求参数 并渲染到另一个页面router.get("/login", async ctx => {let username = ctx.query.usernamelet password = ctx.query.passwordawait ctx.render("home", {/** * 完整写法: * username:username * password:password */username,password})})​

若需要获取post请求的数据,需要安装第三方模块koa-parser来解析post请求,实例代码如下所示:

​ <form action="/login"><!-- name:定义表单提交的数据字段 --><input type="text" name="username"><input type="password" name="password"><input type="submit" name="登录"></form>​
const Koa = require("koa");const parser = require('koa-parser')const app = new Koa(); app.use(parser());//获取post请求的参数router.get("/form", async ctx => {await ctx.render("form")})router.post("/data", async ctx => {let username = ctx.request.body.username;await ctx.render("data",{usr:username})})
<form action="/data" method="POST"><input type="text" name="username"><input type="submit" value="提交数据"></form>

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}