news 2026/6/10 17:19:32

从后端获取数据传输到前端进行显示(cpp-httplib#x2B;Vditor#x2B;Handlebars)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从后端获取数据传输到前端进行显示(cpp-httplib#x2B;Vditor#x2B;Handlebars)

1. 引言

在之前的文章中,笔者实现了一个渲染 Markdown 格式文章的网页前端 Vite 项目(参看《给 Markdown 渲染网页增加一个目录组件(Vite+Vditor+Handlebars)》),以及一个支持 Markdown格式数据的静态文件服务的后端项目(参看《使用cpp-httplib发布静态文件服务》)。在这里,就将前端与后端打通,通过 cpp-httplib 提供的 API 接口动态返回 Markdown 文章数据,由前端 Vite 项目利用 Handlebars 模板与 Vditor 渲染引擎完成展示与交互。

2. 实现

2.1 后端

JSON 是 HTTP 传输中事实上的标准数据格式,尤其是在现代 Web API(特别是 RESTful API)中,因此我们将后端的接口改成返回 JSON 格式数据的接口。按照 RESTful API 风格,命名为/api/v1/post,使用 HTTP 的 Get 方法。具体代码如下:

/* by 01130.hk - online tools website : 01130.hk/zh/jpgcompression.html */ #include <httplib.h> #include <filesystem> #include <fstream> #include <iostream> #include <nlohmann/json.hpp> #include <string> #include "BlogData.h" using namespace std; using namespace nlohmann; namespace fs = std::filesystem; int main() { httplib::Server svr; std::u8string docRoot = u8"D:/Work/HttpServer/public/最小二乘问题详解1:线性最小二乘"; svr.Get("/api/v1/post", [&](const httplib::Request& req, httplib::Response& res) { DataTransfer::BlogData blogData; { fs::path blogMetaJsonPath = fs::path(docRoot) / "meta.json"; nlohmann::json blogMetaJson; ifstream infile(blogMetaJsonPath); infile >> blogMetaJson; blogData.blogMeta = blogMetaJson; } { fs::path blogContentPath = fs::path(docRoot) / u8"最小二乘问题详解1:线性最小二乘.md"; std::ifstream file(blogContentPath, std::ios::binary); std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); blogData.content = std::move(content); } // 构造响应 JSON json response_data = blogData; // 设置响应 res.set_header("Access-Control-Allow-Origin", "http://127.0.0.1:8000"); // 允许跨域 res.set_content(response_data.dump(), "application/json"); }); std::cout << "Server listening on http://127.0.0.1:8080\n"; svr.listen("0.0.0.0", 8080); return 0; }

这段代码的实现非常简单,分别读取元数据meta.json和 文章内容最小二乘问题详解1:线性最小二乘.md文件,组织成 JSON 格式,设置到 HTTP 响应的内容中并且返回。其中,用到 nlohmann/json 对 结构体对象序列化和反序列化(参考《C++中JSON序列化和反序列化的实现》)。

另外需要注意的就是跨域问题。由于前端项目与后端项目是分离的,因此它们处在不同的域中,前端要请求后端的资源,就会发生跨域问题。解决办法就是在 HTTP 的响应头中设置允许跨域的键和值:

/* by 01130.hk - online tools website : 01130.hk/zh/jpgcompression.html */ res.set_header("Access-Control-Allow-Origin", "http://127.0.0.1:8000"); // 允许跨域

2.2 前端

前端的修改就简单多了,只需要修改获取远端数据的接口就可以了:

const response = await fetch("http://127.0.0.1:8080/api/v1/post"); if (!response.ok) { throw new Error("网络无响应"); } const blogData = await response.json(); //...

其实这也是前后端分离的优势,后端提供数据资源的获取,前端则负责数据的可视化。最终的效果如下所示:

3. 其他

以上就是一个最简单的前后端分离 Web 项目。任何复杂功能都可以在此基础上进行扩展,只需搭配相应的架构设计,以更好地支持具体业务需求。

实现代码

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:29:10

揭秘Java解析物联网海量数据:3种你必须掌握的高性能处理方案

第一章&#xff1a;Java 物联网数据解析的背景与挑战随着物联网&#xff08;IoT&#xff09;设备的爆发式增长&#xff0c;海量传感器持续产生结构多样、实时性强的数据流。Java 作为企业级系统开发的主流语言&#xff0c;凭借其跨平台能力、成熟的生态体系和强大的并发处理机制…

作者头像 李华
网站建设 2026/6/10 9:31:10

家庭相册活化:老照片配上VoxCPM-1.5-TTS-WEB-UI讲述背后故事

家庭相册活化&#xff1a;老照片配上VoxCPM-1.5-TTS-WEB-UI讲述背后故事 在整理泛黄的家庭相册时&#xff0c;你是否曾对着一张黑白合影发呆——照片里的人笑容灿烂&#xff0c;可他们的故事却随着岁月悄然失声&#xff1f;爷爷年轻时为何站在天安门前久久不愿离去&#xff1f;…

作者头像 李华
网站建设 2026/6/10 9:33:38

学生党也能玩转AI语音:VoxCPM-1.5-TTS-WEB-UI免费镜像开放下载

学生党也能玩转AI语音&#xff1a;VoxCPM-1.5-TTS-WEB-UI免费镜像开放下载 你有没有想过&#xff0c;自己动手给一段文字配上真人般的声音&#xff1f;不是那种机械感十足的导航音&#xff0c;而是有情感、有节奏、甚至能“克隆”你朋友声音的语音输出——听起来像是顶级实验室…

作者头像 李华
网站建设 2026/6/9 21:19:38

儿童早教创新:家长定制VoxCPM-1.5-TTS-WEB-UI讲故事声音模板

儿童早教创新&#xff1a;家长定制VoxCPM-1.5-TTS-WEB-UI讲故事声音模板在智能音箱和有声读物早已进入千家万户的今天&#xff0c;一个看似简单却常被忽视的问题浮出水面&#xff1a;为什么孩子总是听不进去“机器讲的故事”&#xff1f;许多家长发现&#xff0c;哪怕是最生动的…

作者头像 李华
网站建设 2026/6/10 3:10:30

如何让Quarkus 2.0原生应用秒级启动?揭秘JVM与native配置的最优解

第一章&#xff1a;Quarkus 2.0 原生编译概述Quarkus 2.0 引入了对原生编译的全面优化&#xff0c;显著提升了基于 GraalVM 的构建效率与运行时性能。通过将 Java 应用提前编译为本地可执行文件&#xff0c;Quarkus 实现了极短的启动时间和更低的内存占用&#xff0c;特别适用于…

作者头像 李华
网站建设 2026/6/10 9:31:10

JDK 23重磅更新:instanceof int支持背后的5个关键设计考量

第一章&#xff1a;JDK 23中instanceof int支持的背景与意义Java 语言在持续演进中不断优化语法特性&#xff0c;提升开发者的编码效率与代码可读性。JDK 23 引入了一项备受关注的语言改进——对 instanceof 操作符支持基本类型&#xff08;如 int&#xff09;的直接判断。尽管…

作者头像 李华