js:Vue3.js+Express实现SSR服务端渲染

简介: js:Vue3.js+Express实现SSR服务端渲染

常用的基于vue/react的服务端渲染方案,如下:

  • 使用next.js/nuxt.js的服务端渲染方案
  • 使用node+vue-server-renderer实现vue项目的服务端渲染
  • 使用node+React renderToStaticMarkup实现react项目的服务端渲染
  • 传统网站通过模板引擎来实现ssr(比如ejs, jade, pug等)
  • 使用rendertron实现SPA项目的服务端渲染

文档:

Vue SSR 基础示例

pnpm install vue

example.js

// 此文件运行在 Node.js 服务器上
import { createSSRApp } from "vue";
// Vue 的服务端渲染 API 位于 `vue/server-renderer` 路径下
import { renderToString } from "vue/server-renderer";
const app = createSSRApp({
  data: () => ({ count: 1 }),
  template: `<button @click="count++">{{ count }}</button>`,
});
renderToString(app).then((html) => {
  console.log(html);
});

运行

$ node example.js
<button>1</button>

Vue SSR + Express 示例

项目结构

$ tree -I node_modules
.
├── app.js
├── client.js
├── index.html
├── package.json
└── server.js

package.json

{
    "type": "module",
    "dependencies": {
        "express": "^4.18.1",
        "twig": "^1.15.4",
        "vue": "^3.2.40",
        "vue-server-renderer": "^2.7.10"
    }
}

服务端 server.js

// server.js
import express from "express";
import Twig from "twig";
import { renderToString } from "vue/server-renderer";
import { createApp } from "./app.js";
const server = express();
// 设置模板引擎
server.engine("html", Twig.renderFile);
server.set("view engine", "html");
server.set("views", "./");
server.get("/", (req, res) => {
  const app = createApp();
  renderToString(app).then((html) => {
    res.render("index.html", {
      html: html,
    });
  });
});
// 托管客户端文件
server.use(express.static("."));
server.listen(3000, () => {
  console.log("server: http://localhost:3000");
});

app.js

// app.js (在服务器和客户端之间共享)
import { createSSRApp } from "vue";
export function createApp() {
  return createSSRApp({
    data() {
      return {
        count: 1,
      };
    },
    template: `<button @click="handleClick">+{{ count }}</button>`,
    methods: {
      handleClick() {
        this.count++;
      },
    },
    created() {
      // server client
      console.log("created");
    },
    mounted() {
      // client
      console.log("mounted");
    },
  });
}

客户端

// client.js
import { createApp } from "./app.js";
createApp().mount("#app");

index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Vue SSR Example</title>
    <script type="importmap">
      {
        "imports": {
          "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
        }
      }
    </script>
    <script type="module" src="/client.js"></script>
  </head>
  <body>
    <div id="app">{{html}}</div>
  </body>
</html>

启动服务

$ node server.js

访问地址:http://localhost:3000/

渲染后返回的html

<!DOCTYPE html>
<html>
  <head>
    <title>Vue SSR Example</title>
    <script type="importmap">
      {
        "imports": {
          "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
        }
      }
    </script>
    <script type="module" src="/client.js"></script>
  </head>
  <body>
    <div id="app"><button>+1</button></div>
  </body>
</html>

其他方案

相关文章
|
5月前
|
数据采集 Web App开发 JavaScript
Python爬虫如何获取JavaScript动态渲染后的网页内容?
Python爬虫如何获取JavaScript动态渲染后的网页内容?
|
11月前
|
数据采集 JavaScript 搜索推荐
ssr(Nuxt+Next.js)
服务器端渲染(SSR)技术可在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js基于Vue.js,提供自动化路由管理、页面级数据获取和模块化扩展;Next.js基于React.js,支持SSR、静态生成和文件系统路由。两者均具备快速加载、SEO友好和处理复杂页面的优点,但也存在服务器压力大、开发限制和调试困难的缺点。开发者可根据项目需求和技术栈选择合适的框架。
154 2
|
5月前
|
人工智能 监控 前端开发
基于 Next.js 的书法字体生成工具架构设计与 SSR 优化实践
本项目是一款书法字体生成工具,采用 Next.js 14(App Router)与 Tailwind CSS 构建前端,阿里云 Serverless 部署后端。通过混合渲染策略(SSG/SSR/CSR)、Web Worker 异步计算及 CDN 字体分片加载优化性能。服务端借助阿里云函数计算处理计算密集型任务,将平均耗时从 1200ms 降至 280ms,支持 1000+ QPS。动态路由与 ARMS 监控提升工程化水平,未来计划引入 WebGPU 和 AI 字体风格迁移技术,进一步优化用户体验。
|
6月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
7月前
|
数据采集 前端开发 JavaScript
金融数据分析:解析JavaScript渲染的隐藏表格
本文详解了如何使用Python与Selenium结合代理IP技术,从金融网站(如东方财富网)抓取由JavaScript渲染的隐藏表格数据。内容涵盖环境搭建、代理配置、模拟用户行为、数据解析与分析等关键步骤。通过设置Cookie和User-Agent,突破反爬机制;借助Selenium等待页面渲染,精准定位动态数据。同时,提供了常见错误解决方案及延伸练习,帮助读者掌握金融数据采集的核心技能,为投资决策提供支持。注意规避动态加载、代理验证及元素定位等潜在陷阱,确保数据抓取高效稳定。
175 17
|
8月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
338 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
9月前
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
527 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
11月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
11月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
11月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
648 1