广告
返回顶部
首页 > 资讯 > 精选 >Express框架view对象如何使用
  • 719
分享到

Express框架view对象如何使用

2023-07-05 10:07:36 719人浏览 独家记忆
摘要

本篇内容主要讲解“Express框架view对象如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Express框架view对象如何使用”吧!Expess View 从指定渲染引擎开始以 m

本篇内容主要讲解“Express框架view对象如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Express框架view对象如何使用”吧!

    Expess View 从指定渲染引擎开始

    以 mustache 渲染引擎为例,需要初始化一些代码

    const app = express()app.set("view engine", "mustache");app.engine("mustache", mustacheExpress());app.set("views", toAbsolutePath("./views"));
    • 指定视图引擎

    • 指定引擎工具

    • 指定视图位置

    安装依赖

    pnpm install mustache mustache-express

    从 res.render 函数开始

    render 函数接收两个参数,第一个 view 的路径,第二个渲染数据。

    res.render = function render(view, options, callback) {   // 调用 app.render  app.render(view, opts, done);};

    下面是 app.render 代码实现

    app.render = function render(name, options, callback) {  // view  if (!view) {    var View = this.get('view');    view = new View(name, {      defaultEngine: this.get('view engine'),      root: this.get('views'),      engines: engines    });    if (!view.path) {      var dirs = Array.isArray(view.root) && view.root.length > 1        ? 'directories "' + view.root.slice(0, -1).join('", "') + '" or "' + view.root[view.root.length - 1] + '"'        : 'directory "' + view.root + '"'      var err = new Error('Failed to lookup view "' + name + '" in views ' + dirs);      err.view = view;      return done(err);    }    // prime the cache    if (renderOptions.cache) {      cache[name] = view;    }  }  // render  tryRender(view, renderOptions, done);};

    在 view 不在的情况下,会用 View 实例化 view, 最后调用 tryRender 函数,tryRender 函数会调用 view.render 方法:

    View 的实现

    module.exports = View;function View(name, options) {  // store loaded engine  this.engine = opts.engines[this.ext];  // lookup path  this.path = this.lookup(fileName);}

    跟一般的构造函数一样,初始化一些属性,用传入的 opts 合并一些属性。

    • View 扩展方法

    View.prototype.lookup = function lookup(name) {}View.prototype.render = function render(options, callback) {    this.engine(this.path, options, callback);}View.prototype.resolve = function resolve(dir, file) {}

    render 的具体实现就交给第三方引擎来实现了。

    mustache 的render 方法的实现

    Writer.prototype.render = function render (template, view, partials, config) {  var tags = this.getConfigTags(config);  var tokens = this.parse(template, tags);  var context = (view instanceof Context) ? view : new Context(view, undefined);  return this.renderTokens(tokens, context, partials, template, config);};

    render 函数调用 renderTokens 方法来解析,具体 renderTokens 方法的实现,就不做深入的分析了。

    一个案例切图案例

    需求是这样的,后端使用费 node.js 开发,没有 js 运行时,为了能够快速的完成项目,页面的切头由前端完成。此时页面多,任务重,React/Vue 这种现代框架,需要服务端渲染,后端不想用 node.js,增加复杂度。因为前端 Node.js 能够使用模板渲染,并且模板种类很多,模板能够解决复用的问题,所以前端功能化能够解决,现代前端能结局的问题。

    使用 exprss 服务 + mustache 模板引擎为基础实现一个简单的切图服务

    • Express 创建服务和路由

    • Nodemon 监听文件变化,重新启动路由

    • esno + typescript + es Module 编写服务端代码

    • prettier 格式化文件

    在 express 中使用 mustache

    import express from "express";import mustacheExpress from "mustache-express";app.engine("mustache", mustacheExpress());app.set("view engine", "mustache");app.set("views", toAbsolutePath("./views")); // 指定视图路径
    • 渲染一个视图

    app.get(url, async (_, res) => {    res.render(url, data);});

    mustache 拆分模板的基本能用法

    • 定义模板文件

    • 引用模板文件,以及引入文件下的模板的方法

    • 在模板中使用变量

    • 条件判断

    • 列表渲染

    mustache 官方 GitHub 仓库,需要研究的可以自己访问学习,更多具体的用法。

    示例

    形成一个约定:因为只做简单的切图工作,view + data 文件使用 render 函数渲染的时候一一对应,这样就减少了很多的样板代码。 ·

    • main.server.ts

    读取 views/ 文件夹下的所有视图文件,布局文件不包含(简化),将 /static 目录设置为静态文件夹目录。路由不在单独的写了,此处统一处理为与视图相同命名用于简单的渲染。

    // expressimport express from "express";import mustacheExpress from "mustache-express";// configimport cutConfig from "./cut.config";import defineVars from "iesmo";// nodeimport { resolve } from "path";import fs from "node:fs";const { __dirname } = defineVars(import.meta);export const toAbsolutePath = (p) => resolve(__dirname, p);const routes = fs  .readdirSync(toAbsolutePath("./views/"))  .map((file) => {    if (!/\.mustache$/.test(file)) return null;    return file.replace(/\.mustache$/, "").toLowerCase();  })  .filter((i) => i !== null);const app = express();app.engine("mustache", mustacheExpress());app.set("view engine", "mustache");app.set("views", toAbsolutePath("./views"));app.use("/static", express.static("static"));routes.forEach((route) => {  let url = route === "index" ? "/" : `/${route}`;  app.get(url, async (_, res) => {    let data = (await import(`./data/${route}.ts`)).default;    res.render(route as string, data);  });});app.listen(cutConfig.port, () => {  console.log("server listening on port: ", cutConfig.port);});

    以 index.mustache 模板为示例:

    数据存在 /data 文件夹下,默认输出一个 JS 对象

    <!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta Http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>{{{title}}}</title>    {{#links}}     <link href="{{{href}}}" rel="external nofollow"  rel="external nofollow"  rel="stylesheet" />    {{/links}}    {{#scriptsHead}}    <script src="{{{src}}}"></script>    {{/scriptsHead}}  </head>  <body>    {{>tpls/list }}    {{>layout/footer}}    {{#scriptBody}}    <script src="{{{src}}}"></script>    {{/scriptBody}}  </body></html>
    • {{{title}}} 插入数据

    • 根据 html 渲染出数据

    {{#links}}<link href="{{{href}}}" rel="external nofollow"  rel="external nofollow"  rel="stylesheet" />{{/links}}
    • 使用文件夹中的模板

    <body>    {{>tpls/list }}    {{>layout/footer}}  </body>

    以上行为表示 tpls 目录下的 list 模板文件和 layout 目录下的 footer 模板文件

    到此,相信大家对“Express框架view对象如何使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: Express框架view对象如何使用

    本文链接: https://www.lsjlt.com/news/351314.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Express框架view对象如何使用
      本篇内容主要讲解“Express框架view对象如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Express框架view对象如何使用”吧!Expess View 从指定渲染引擎开始以 m...
      99+
      2023-07-05
    • 一文解析Express框架view对象使用
      目录Expess View 从指定渲染引擎开始安装依赖从 res.render 函数开始View 的实现mustache 的render 方法的实现一个案例切图案例在 express...
      99+
      2023-03-10
      Express框架view对象 Express view
    • Express框架req res对象如何使用
      这篇文章主要讲解了“Express框架req res对象如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Express框架req res对象如何使用”吧!Expre...
      99+
      2023-07-05
    • Express框架reqres对象使用详解
      目录IncomingMessageServerResponse请求对象 req响应对象设置状态码如何来快速测试这些属性和方法呢?下面给出一些示例代码目录结构安装依赖小结Express...
      99+
      2023-03-24
      Express框架req res对象 Express req res
    • Express框架Router、Route和Layer对象如何使用
      今天小编给大家分享一下Express框架Router、Route和Layer对象如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
      99+
      2023-07-05
    • Express框架中_router对象数据结构如何使用
      这篇文章主要介绍了Express框架中_router对象数据结构如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Express框架中_router对象数据结构如何使用文章都会有所收获,下面我们一起来看看吧...
      99+
      2023-07-05
    • Express框架Router Route Layer对象使用示例详解
      目录引言LayerRouteRouter方法统计两个 stack取出 stack 中 layer从 Router 到 layer 的路径Router.route 方法中的 dispa...
      99+
      2023-03-24
      Express使用Router Route Layer Express 对象
    • Node.js 中如何使用Express框架
      这期内容当中小编将会给大家带来有关Node.js 中如何使用Express框架,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Node.js Express 框架Expre...
      99+
      2022-10-19
    • Express框架app函数如何使用
      本篇内容主要讲解“Express框架app函数如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Express框架app函数如何使用”吧!express 函数来源首先要搞明白 express...
      99+
      2023-07-05
    • Node第三方框架Express如何使用
      这篇文章主要讲解了“Node第三方框架Express如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Node第三方框架Express如何使用”吧!1....
      99+
      2022-10-19
    • 如何在 Django 中使用 ASP 框架对象?
      Django 是一个非常流行的 Python Web 框架,它提供了许多功能和工具来帮助开发人员快速构建 Web 应用程序。但是,有时候我们需要在 Django 中使用 ASP 框架对象,以便更好地管理我们的 Web 应用程序。在本篇文章中...
      99+
      2023-11-11
      框架 对象 django
    • 如何在Java框架中使用Unix对象?
      Java是一种使用广泛的编程语言,拥有强大的功能和丰富的开发库。在Java中,使用Unix对象可以为我们的开发带来便利。本文将介绍如何在Java框架中使用Unix对象,以及如何使用Unix对象来处理文件和目录。同时,我们还将提供一些示例代码...
      99+
      2023-11-09
      框架 unix 对象
    • 如何配置ABP框架使用对象映射
      小编给大家分享一下如何配置ABP框架使用对象映射,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!DTO和实体实体实体是领域驱动设计(Domain Driven De...
      99+
      2023-06-29
    • Go语言如何在NumPy框架中使用对象?
      NumPy是Python中一个重要的科学计算工具包,它提供了一个强大的多维数组对象和用于处理数组的函数库。但是,NumPy并不是Python中唯一的科学计算工具,有时候我们需要使用其他语言来解决一些问题,比如Go语言。那么,Go语言如何在...
      99+
      2023-08-21
      对象 numpy 框架
    • 如何使用Go语言对象对NumPy框架进行优化?
      NumPy是Python科学计算中最重要的库之一,它提供了高效的数组和矩阵运算,是许多数据科学家和研究人员必不可少的工具。然而,NumPy在处理大规模数据时,性能可能会受到限制。在本文中,我们将介绍如何使用Go语言对象对NumPy框架进行...
      99+
      2023-08-21
      对象 numpy 框架
    • 配置ABP框架使用对象映射
      目录DTO和实体实体DTO麻烦的映射AutoMapper 集成IObjectMapper/ObjectMapper对象拓展DTO和实体 实体 实体是领域驱动设计(Domain Dri...
      99+
      2022-11-13
    • Django 和 ASP 框架对象:如何选择正确的框架?
      在开发 Web 应用程序时,选择正确的框架是至关重要的。框架可以帮助你加快开发速度,减少代码错误,提高应用程序的可维护性。Django 和 ASP 是两个流行的框架,它们都有自己的优缺点。在本文中,我们将比较 Django 和 ASP 框...
      99+
      2023-11-11
      框架 对象 django
    • Java框架中,Unix对象如何实现?
      Java作为一种强大的编程语言,已经成为许多企业和开发者的首选。在Java应用程序开发中,框架的使用是非常常见的。Unix对象是Java框架中的一个重要概念,下面我们来探讨一下Java框架中Unix对象如何实现。 Unix对象是一种用于描述...
      99+
      2023-11-09
      框架 unix 对象
    • 你知道如何使用 Spring 框架来管理 ASP 对象吗?
      Spring 框架是一种流行的 Java 开发框架,它提供了一种简单的方法来管理 ASP 对象。在本文中,我们将探讨如何使用 Spring 框架来管理 ASP 对象,并提供一些演示代码。 ASP(Active Server Pages)是一...
      99+
      2023-10-23
      对象 unix spring
    • 如何在Go中使用对象和函数来构建框架?
      Go 是一种非常流行的编程语言,其简洁、高效的特性让它在 Web 开发、云计算、网络编程等方面得到广泛应用。在使用 Go 编写应用程序时,构建框架是一个非常重要的环节。本文将介绍如何在 Go 中使用对象和函数来构建框架,让你的应用程序更加灵...
      99+
      2023-11-02
      对象 函数 框架
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作