• 05-nunjucks模板入门


            通过模板引擎,我们可以直接设置响应的html页面,并且把后台数据绑定到模板张,发给客户端,而不是以字符串的方式发送出去,目前市面上有很多模板引擎,例如nunjucks。

    安装

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

    cnpm install --save koa-views  nunjucks
    • koa-views 是负责配置koa的模板引擎
    • nunjucks 是下载模板引擎

    配置模板引擎

    app.ues(views(两个参数) 第一个参数是指定模板引擎的存放在哪个目录,第二个是指定模板引擎

    1. const Koa = require("koa"); // 引入koa 构造函数
    2. const views = require("koa-views"); // 引入 koa-views
    3. const nunjucks = require("nunjucks") // 引入nunjucks
    4. const app = new Koa(); // 创建应用
    5. app.use(views(__dirname+ "/views",{
    6. map:{html:"nunjucks"}
    7. })) // 第一个是存放路径 第二个是个函数 指定模板引擎的类型

    在存放模板的文件内创建html文件来实现模板

    用ctx渲染模板 切记 引入路由需要设置成立即执行函数

            app.use一个async函数 形参ctx上下文 然后ctx.render (render是一个异步操作) 在ctx前面加入一个await (等待),render()第一个参数写模板的名字,会根据前面的设置自动取views目录内寻找,第二个参数可以指定一个数据 用{}添加标题:{内容}可以将内容传递给index文件。

    1. const Koa = require("koa"); // 引入koa 构造函数
    2. const router = require("koa-router")(); // 引入路由
    3. const views = require("koa-views"); // 引入 koa-views
    4. const nunjucks = require("nunjucks"); // 引入nunjucks
    5. const app = new Koa(); // 创建应用
    6. router.get("/",async ctx =>{
    7. await ctx.render("index",{title:"首页"})
    8. });
    9. router.get("/doc",async ctx =>{
    10. await ctx.render("index",{title:"视频页 "})
    11. });
    12. app.use(views(__dirname+ "/views",{
    13. map:{html:"nunjucks"}
    14. }));
    15. app.use(router.routes());
    16. app.listen(3000,()=>{
    17. console.log("response [200]")
    18. });

    处理表单数据

            表单一般有两种方式来提交数据,常用的method=“”表示发送请求的时候用什么方法请求,(发送请求用get,提交数据用post)

            ctx.query.username;(query可以获取到get请求的参数).username(指定获取的参数)

    get请求获取成功:

    1. const Koa = require("koa"); // 引入koa 构造函数
    2. const router = require("koa-router")(); // 引入路由
    3. const views = require("koa-views"); // 引入 koa-views
    4. const nunjucks = require("nunjucks"); // 引入nunjucks
    5. const app = new Koa(); // 创建应用
    6. router.get("/",async ctx =>{
    7. await ctx.render("index",{title:"首页"})
    8. });
    9. router.get("/doc",async ctx =>{
    10. await ctx.render("index",{title:"视频页 "})
    11. });
    12. // 显示提交的账户密码
    13. router.get("/login",async ctx =>{
    14. let username = ctx.query.username;
    15. let password = ctx.query.password;
    16. await ctx.render("home",{
    17. username:username,
    18. password:password
    19. })
    20. });
    21. app.use(views(__dirname+ "/views",{
    22. map:{html:"nunjucks"}
    23. }));
    24. app.use(router.routes());
    25. app.listen(3000,()=>{
    26. console.log("response [200]")
    27. });

            接下来是post请求  这里需要先下载koa-parser模块 然后app.use(parser(()引入中间件(引入的写在上面use()),这样就可以解析post请求的函数了,post请求不能用query来获取参数了,此处应该使用request.body.需要获取的信息来获取参数 。

    1. const Koa = require("koa"); // 引入koa 构造函数
    2. const router = require("koa-router")(); // 引入路由
    3. const parser = require("koa-parser");// 引入解析post请求的模块
    4. const views = require("koa-views"); // 引入 koa-views
    5. const nunjucks = require("nunjucks"); // 引入nunjucks
    6. const app = new Koa(); // 创建应用
    7. app.use(parser());
    8. router.get("/",async ctx =>{
    9. await ctx.render("index",{title:"首页"})
    10. });
    11. router.get("/doc",async ctx =>{
    12. await ctx.render("index",{title:"视频页 "})
    13. });
    14. // 显示 get提交的数据
    15. router.get("/login",async ctx =>{
    16. let username = ctx.query.username;
    17. let password = ctx.query.password;
    18. await ctx.render("home",{
    19. username:username,
    20. password:password
    21. })
    22. }); // 获取 post提交的数据
    23. router.post("/login",async ctx =>{
    24. let username = ctx.request.body.username;
    25. let password = ctx.request.body.password;
    26. await ctx.render("home",{
    27. username:username,
    28. password:password
    29. })
    30. });
    31. app.use(views(__dirname+ "/views",{
    32. map:{html:"nunjucks"}
    33. }));
    34. app.use(router.routes());
    35. app.listen(3000,()=>{
    36. console.log("response [200]")
    37. });

  • 相关阅读:
    初学arp欺骗
    静态IP是什么意思?和动态IP 有什么区别
    强缓存和协商缓存原理,及前端如何和服务端一同控制影响浏览器缓存,以及代码实战
    阿里在开源领域又有哪些新动向?来首届阿里开源开放周找答案!
    Spring AOP案例:百度网盘密码数据兼容处理 与 SpringAOP总结
    elasticsearch-1.7.1 (es Windows 64) 安装、启动、停止的详细记录
    【MySQL调优(二)】性能监控分析 - Show Profile
    【Vue3-Flask-BS架构Web应用】实践笔记1-使用一个bat脚本自动化完整部署环境
    Druid数据库连接池
    中级C++:单例模式
  • 原文地址:https://blog.csdn.net/qq_68478665/article/details/126481536