You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用React JS+Node.js(Express,MongoDB)搭建支持代码片段的博客

基于React + Express + MongoDB的个人博客实现方案

一、技术栈选型

  • 前端:纯React JS,搭配轻量Markdown相关依赖实现内容编辑、渲染能力,不引入额外全栈框架
  • 后端:Node.js + Express 框架,负责接口提供、登录鉴权逻辑
  • 数据库:MongoDB,存储用户信息、博客文章、标签等核心数据
  • 核心辅助依赖:
    • 前端用react-markdown做Markdown内容渲染,react-syntax-highlighter实现代码片段语法高亮,react-router-dom做单页路由,@uiw/react-md-editor作为轻量Markdown编辑器
    • 后端用mongoose做MongoDB数据模型映射,jsonwebtoken实现登录态校验,bcrypt做密码哈希加密,cors处理开发环境跨域

二、后端实现逻辑

数据模型设计

用mongoose定义两个核心数据模型即可满足需求:

  • 管理员用户模型:仅存储博主账号信息,不开放普通用户注册,字段包含用户名、密码哈希值、账号创建时间
  • 博客文章模型:核心字段如下
    • title:字符串类型,文章主标题,必填
    • content:字符串类型,存储Markdown格式的文章正文,支持普通文本、多级标题、代码块等所有内容格式,必填
    • summary:字符串类型,文章摘要,支持手动填写或自动从正文截取前150字生成
    • tags:数组类型,存储文章关联的标签
    • createTime/updateTime:时间类型,新建、编辑文章时自动生成更新
    • isPublished:布尔类型,标记文章为草稿状态或已发布状态

接口设计

采用RESTful风格分两类接口:

  • 公开无鉴权接口(所有访客可访问)
    • GET /api/posts:拉取已发布的文章列表,支持分页、按标签筛选
    • GET /api/posts/:id:拉取单篇文章的完整详情
    • POST /api/admin/login:管理员账号密码校验,登录成功返回JWT令牌
  • 鉴权接口(请求头携带合法JWT才可访问)
    • POST /api/admin/posts:新建文章,传入标题、正文、标签、发布状态等参数
    • PUT /api/admin/posts/:id:编辑对应ID的已有文章
    • DELETE /api/admin/posts/:id:删除对应ID的文章

后端注意事项

  • 管理员密码禁止明文存储,注册/初始化账号时用bcrypt生成哈希值存入数据库,登录时比对哈希值校验密码正确性
  • 统一写鉴权中间件,拦截所有/api/admin路径下的请求,令牌缺失或非法时直接返回401状态码
  • 所有接口加基础参数校验,比如新建文章时校验标题、内容不能为空,避免脏数据写入数据库
  • 个人博客无需开放注册入口,直接在服务初始化时生成默认管理员账号,或通过一次性脚本设置账号密码,减少被攻击的风险

三、前端实现逻辑

用React做单页应用,核心页面分为5个模块:

  • 文章列表页:首页以卡片形式展示所有已发布文章,卡片上显示标题、摘要、发布时间、关联标签,点击卡片跳转到对应文章详情页
  • 文章详情页:拉取单篇文章数据后,用Markdown渲染组件把正文转成页面DOM,代码块部分自动做语法高亮,展示效果和参考的博客样例一致
  • 管理员登录页:提供账号密码输入框,登录成功后把JWT令牌存在localStorage,自动跳转到后台管理页
  • 文章编辑页:左侧为Markdown编辑区,右侧为内容实时预览区,编辑器自带快捷按钮,可一键插入多级标题、代码块、列表等格式,编辑完成后可选择存为草稿或直接发布
  • 后台文章管理页:展示所有文章(含草稿),提供编辑、删除操作入口

前端注意事项

  • 所有需要鉴权的接口请求,自动从localStorage读取JWT加到请求头中,如果接口返回401状态码,自动清除本地存储的令牌并跳转到登录页
  • 代码高亮默认支持JavaScript、Python、CSS、HTML等常用开发语言,可额外给代码块加一键复制按钮提升阅读体验
  • 做基础响应式适配,保证移动端访问时内容排版正常

四、核心发布能力落地

需要的三类内容发布能力,通过Markdown格式存储+渲染的方案可以一次性覆盖,无需单独开发复杂的富文本解析逻辑:

  • 纯文本发布:直接在编辑器中输入普通文字即可,渲染时自动转成段落标签展示
  • 多级标题发布:在标题行首加对应数量的#标记,即可生成一级到六级标题,层级样式和参考博客样例一致
  • 代码片段发布:用三个反引号包裹代码内容并指定对应语言,渲染时自动生成带语法高亮的代码块,展示效果和参考样例完全匹配

五、部署方案

  • 前端:执行打包命令生成静态资源文件,直接用Nginx托管即可
  • 后端:Express服务用PM2做进程守护,部署在服务器指定端口
  • 数据库:可直接在服务器安装MongoDB,也可选用云厂商提供的托管MongoDB服务,减少运维成本
  • 反向代理配置:Nginx统一接收域名请求,把/api路径的请求转发到Express服务,其余路径返回前端静态资源,即可解决线上跨域问题

内容的提问来源于stack exchange,提问作者Rohit Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:54:25