koa2入门系列(三)

作者 : 开心源码 本文共3172个字,预计阅读时间需要8分钟 发布时间: 2022-05-13 共238人阅读

koa页面渲染

上一节我们通过koa的路由中间件,在上下文的body属性中渲染页面内容,但那这是基本的少量字符串内容,而我们前台所用的页面,或者者浏览器所渲染的页面,基本都是html标签的页面,假如想在koa路由中渲染标签内容,又如何做呢,接下来看代码

1、渲染html内容

const Koa = require('koa');const Router = require('koa-router');const app = new Koa();const router = new Router();app.use(async (ctx, next) => {  await next();});router.get('/', async ctx => {  ctx.type = `text/html;charset=utf-8`;  ctx.body = `  <!DOCTYPE html>    <html lang="en">      <head>        <meta charset="UTF-8" />        <title></title>      </head>      <body>        <h2>test</h2>      </body>    </html>  `;});//启动路由app.use(router.routes());app.use(router.allowedMethods());app.listen(3000);

重启服务,刷新浏览器,就会看到浏览器显示加粗的test字样。
众所周知,日常开发中,页面需要展现的标签内容有时候是很庞大的,而这时候body又不可能去填写那么多的内容,这时候就得益于编程中的模块化思想了:就是把想要的内容当成一个模块引入。

2、渲染js标签文件

接下来新建一个html.js文件,把上面要展现的html内容复制过去

module.exports = `<!DOCTYPE html>  <html lang="en">    <head>      <meta charset="UTF-8" />      <title></title>    </head>    <body>      <h2>test</h2>    </body>  </html>`;

而后在app.js中引入

const Koa = require('koa');const Router = require('koa-router');const testTpl = require('./html.js');console.log(testTpl);const app = new Koa();const router = new Router();app.use(async (ctx, next) => {  await next();});router.get('/', async ctx => {  ctx.type = `text/html;charset=utf-8`;  ctx.body = testTpl;});//启动路由app.use(router.routes());app.use(router.allowedMethods());app.listen(3000);

重启服务器,刷新浏览器,这样页面就能展现同样的内容。

3、模版渲染

尽管当作模块引入也能达到我们想要的效果,但html.js毕竟只是一个js文件,跟我们正常使用的html文件还是不一样,假如想要使用html文件,就要使用本节需要用到的koa-views中间件了。

  • 首先下载yarn add koa-views ejs,其中ejs是模版库,用来渲染模版文件的,具体用法参考官网。
  • 而后在项目根目录新建views文件夹,并在该目录下新建index.ejsnews.ejsblocks/header.ejs文件,文件内的内容如下
<!DOCTYPE html><html lang="en">  <!-- index.ejs -->  <head>    <meta charset="UTF-8" />    <title>首页</title>  </head>  <body>    <!-- 模版语法,include包含的路径是以views配置的文件夹为准的 -->    <%- include('blocks/header.ejs') %>    <p><%= commonData %></p>    <p><%= title %></p>    <ul>      <% for(var i = 0;i < list.length;i++){ %>      <li><%= list[i] %></li>      <% } %>    </ul>  </body></html>
<!DOCTYPE html><html lang="en">  <!-- news.ejs -->  <head>    <meta charset="UTF-8" />    <title>首页</title>  </head>  <body>    <!-- 模版语法,include包含的路径是以views配置的文件夹为准的 -->    <%- include('blocks/header.ejs') %>    <p><%= commonData %></p>    <p><%= title %></p>    <ul>      <% for(var i = 0;i < list.length;i++){ %>      <li><%= list[i] %></li>      <% } %>    </ul>  </body></html>
<!-- header.ejs --><h1>这是一个头部模块</h1>

最后配置app.js文件,使用模版文件

const Koa = require('koa');const Router = require('koa-router');const Views = require('koa-views');const testTpl = require('./html.js');const app = new Koa();const router = new Router();// 配置模版引擎中间件,.html和.ejs配置取其一// 匹配.html后缀模版文件// app.use(//   Views('views', {//     map: { html: 'ejs' }//   })// );// 匹配.ejs后缀模版文件app.use(  Views('views', {    extension: 'ejs'  }));app.use(async (ctx, next) => {  await next();});// 配置公共信息的中间件app.use(async (ctx, next) => {  ctx.state.commonData = '中间件:公共信息配置,其中commonData是随便起的名字';  ctx.state.commonData2 =    '中间件2:公共信息配置,其中commonData2是随便起的名字';  // 要显式向下继续执行  await next();});// 配置首页模版信息router.get('/', async ctx => {  const title = 'Hello world !';  const list = ['Charles', 'Jack', 'Black', 'Lusy'];  /**   * 利用上下文的render函数渲染匹配到的文件   * index:匹配的中间件views文件夹下的文件名,后缀是.html或者.ejs   * {title,list}:匹配的文件中使用的变量   */  await ctx.render('index', { title, list });});router.get('/news', async ctx => {  await ctx.render('news', {});});router.get('/html', async ctx => {  ctx.type = `text/html;charset=utf-8`;  ctx.body = testTpl;});//启动路由app.use(router.routes());app.use(router.allowedMethods());app.listen(3000);

重启node,刷新浏览器


输入对应的/news/html也能看到对应的内容。
到这里,koa模版渲染中间件的基本使用就完成了。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » koa2入门系列(三)

发表回复