之前我们通过Koa创建了一个web服务器,并可以根据用户请求路径的不同响应不同的页面,但是每一个页面的内容都是通过字符串的方式给送给浏览器的,这样的开发方式并不友好,我们更希望直接发送html页面。
模板引擎可以解决这个问题,通过模板引擎,可以直接设置响应的html页面,并且可以把后台数据绑定到模板中,然后发送给客户端。
目前市面上有很多模板引擎,这里我们选择一个功能完善,又容易上手的模板引擎:nunjucks
在koa框架下安装nunjucks需要两个第三方模块
koa-views:负责配置koa的模板引擎
nunjucks:下载模板引擎
执行命令安装这两个模块
npm i --save koa-views
npm i --save nunjucks
//server.js
const 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.username
let password = ctx.query.password
await 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>