基于NodeJS的前后端分离的思考与实践(二)模版探索

yizhihongxing

【标题】基于NodeJS的前后端分离的思考与实践(二)模版探索

【摘要】本文将探索基于NodeJS的前后端分离场景下的模版渲染,包括模版引擎的选择、模版渲染的实现方式以及相关的代码示例。

一、选择模板引擎

在前后端分离的情况下,有许多选择支持前后端都能够使用的模版引擎,例如EJS、Handlebars、Pug等。在选择模板引擎的时候,我们需要考虑一些关键因素,例如模板语言本身的易懂程度、渲染性能、扩展能力等等。本文选择使用Pug模板来探索模版渲染的实现。

二、模版渲染实现方式探索

在前后端分离的情况下,一般情况下是通过Ajax或者fetch等方式从服务器异步获取数据,然后通过模板引擎来渲染模板并将数据插入到对应的位置上,最终显示到用户界面上。

下面,我们将具体探索一下Pug模板渲染的实现方式。首先在后端服务器中设置路由,当前端请求某个模板页面时,服务器渲染对应的Pug模板,并将模板中需要的数据渲染出来后返回给前端。具体实现代码如下:

const express = require('express');
const app = express();
const pug = require('pug');

// 设置模板引擎为Pug
app.set('view engine', 'pug');

// 设置模板目录
app.set('views', './views');

// 定义渲染模板的路由
app.get('/', (req, res) => {
  res.render('index', {
    title: 'Node.js学习笔记',
    content: '这是一篇关于Node.js的学习笔记'
  });
});

// 启动服务器,监听端口
app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

以上代码中,我们在服务器端设置了Pug模板引擎,并定义了一个路由用于渲染index.pug模板,同时传入了该模板需要的数据,包括标题和正文内容。

然后在前端使用Ajax或者fetch等方式请求该路由,如下所示:

const xhr = new XMLHttpRequest();
xhr.open('GET', '/');
xhr.send();

xhr.onreadystatechange = function() {
  if(xhr.readyState === 4 && xhr.status === 200) {
    const data = xhr.responseText;
    document.querySelector('#app').innerHTML = data;
  }
};

当我们在前端成功获取到服务器返回的数据后,我们就可以通过jQuery等JS框架将其插入到指定的位置上,并渲染出最终的视图页面。

三、示例情境

示例一

在一个电商网站的商品详情页中,使用Node.js和Pug来渲染商品详情的页面。其中需要展示的信息包括商品名称、价格、图片等。

在服务器端,我们可以返回一个包含商品相关数据的JSON对象,如下所示:

{
  "title": "商品A",
  "price": "299元",
  "image": "https://example.com/images/goods-a.png"
}

然后在Pug模板中按照需要的方式使用这些数据,渲染出我们所需的商品详情页面。最终该页面可以通过Ajax等方式插入到网站中的指定位置上。

示例二

在一个博客网站中,使用Node.js和Pug来渲染博客的文章列表页面。其中需要展示的信息包括文章标题、作者、发布时间等。

在服务器端,我们可以通过数据库查询将所有的文章相关数据查询出来,然后将其作为JSON对象返回给前端,如下所示:

{
  "articles": [
    {
      "title": "文章A",
      "author": "张三",
      "publishTime": "2021-01-01"
    },
    {
      "title": "文章B",
      "author": "李四",
      "publishTime": "2021-01-02"
    }
  ]
}

然后在Pug模板中,我们可以使用each语句来遍历文章列表,并将每篇文章的标题、作者、发布时间等信息展示出来。最终该页面也可以通过Ajax等方式插入到网站中的指定位置上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于NodeJS的前后端分离的思考与实践(二)模版探索 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结

    JS对象与JSON互转换: JS对象和JSON都是用来表示数据的形式,其中JS对象是在JS代码中使用的,而JSON则是用于数据交换的一种格式。在JS中,可以使用JSON.parse()方法将JSON字符串转换成JS对象,使用JSON.stringify()方法将JS对象转换成JSON字符串。 下面是将JSON字符串转换成JS对象的示例代码: const js…

    node js 2023年6月8日
    00
  • 手把手教你如何编译打包video.js

    手把手教你如何编译打包video.js 简介 video.js是一个流行的HTML5视频播放器,具有自适应布局和全屏功能,同时支持多平台和浏览器。它的源代码托管在GitHub上,可以自定义并打包编译生成适合自己网站需要的视频播放器。本攻略将介绍如何编译打包video.js。 步骤 1. 准备工作 在开始编译打包之前,需要先安装Node.js和npm,并确保已…

    node js 2023年6月8日
    00
  • node.js+jQuery实现用户登录注册AJAX交互

    实现用户登录注册AJAX交互,需要前端使用jQuery实现AJAX请求向后端node.js服务器端发送请求并处理数据,后端使用Express.js框架进行路由设计、中间件处理和数据存储等操作。 以下是具体步骤: 创建Express项目,在项目中安装body-parser、express-session、mongoose等模块,用于处理请求参数、session…

    node js 2023年6月8日
    00
  • Node.js 操作本地文件及深入了解fs内置模块

    Node.js 操作本地文件及深入了解fs内置模块攻略 什么是 fs 模块 在 Node.js 中,fs 模块是一个内置的模块,用于操作文件系统。 通过 fs 模块,可以实现文件的读取、写入、删除等常见的操作。 在使用 fs 模块之前,需要使用 require 关键字来加载该模块: const fs = require(‘fs’); 读取文件 在 Node.…

    node js 2023年6月8日
    00
  • js编写简单的聊天室功能

    下面是JS编写简单的聊天室功能的完整攻略: 1. 构建前端页面 首先,需要使用 HTML、CSS 和 JavaScript 来构建聊天室页面。可以使用 Bootstrap 或其他前端框架来简化页面的构建过程。 2. 使用WebSocket协议 使用WebSocket协议来实现实时通信,可以使用 Socket.IO,这是一个基于 Node.js 的跨平台实时通…

    node js 2023年6月8日
    00
  • vue MVVM双向绑定实例详解(数据劫持+发布者-订阅者模式)

    Vue MVVM双向绑定实例详解(数据劫持+发布者-订阅者模式) 一、MVVM模式 MVVM是Model-View-ViewModel的缩写。在前端开发中,MVVM是一种设计模式,它将数据(Model)、业务逻辑(ViewModel)和页面(View)分离开来。其中,ViewModel充当了连接View和Model的纽带,通过ViewModel将数据绑定到V…

    node js 2023年6月8日
    00
  • Nodejs Stream 数据流使用手册

    Node.js Stream 数据流使用手册 Node.js 的数据流(Stream)是一种可读写的、基于事件的API。它们是在处理大量数据时非常有用的工具。Node.js中的Stream属性非常实用,可以帮助我们大大提高服务器的性能。 数据流(Stream)概述 数据流是一种抽象的界面,它让我们可以像读写文件一样读写数据。 Node.js在 fs 和 ne…

    node js 2023年6月8日
    00
  • 详解阿里Node.js技术文档之process模块学习指南

    下面我就来详细讲解“详解阿里Node.js技术文档之process模块学习指南”的完整攻略。 什么是process模块 process模块是Node.js中一个全局对象,它提供了很多有用的方法和属性,用于返回关于当前 Node.js 进程的信息,控制 Node.js 进程以及与 Node.js 进程交互等。 主要方法和属性 process.argv proc…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部