无头CMS对接小程序,一套内容多端发布
无头CMS对接小程序,一套内容多端发布,核心思路是让内容管理系统只负责存储和输出数据,小程序通过API拉取内容进行展示。
这样同一篇内容可以同时用于小程序、网站或App,不用重复录入。
本文面向零基础用户,从环境准备到接口调通,给出可直接照做的步骤。
准备条件与工具选型
开始前需要确认三件事:一台可运行Node.js的服务器或本地电脑、一个已注册的小程序账号、一款支持REST或GraphQL的无头CMS。
常见选择包括Strapi、Directus、Ghost等,本文以Strapi为例,因为其后台操作直观且对新手友好。
服务器建议配置:1核2G起步,安装Node.js 18或20版本,用node -v确认。
小程序端需要在小程序后台配置合法域名,否则无法请求外部API。
安装Strapi的命令如下:
npx create-strapi-app@latest my-cms --quickstart
执行完成后浏览器会自动打开http://localhost:1337/admin,按提示注册管理员账号。
创建内容类型并开放接口
登录Strapi后台后,进入Content-Type Builder,新建一个集合类型,例如“文章”,添加字段:标题(文本)、正文(富文本)、封面图(媒体)、发布时间(日期)。
保存后系统会自动重启。
随后需要开放接口权限。
进入Settings → Roles → Public,找到“文章”对应的find和findOne权限,勾选保存。
此时访问http://你的IP:1337/api/articles应该能看到JSON数据。
如果返回403错误,说明权限未开放;
如果返回404,检查内容类型名称是否拼写正确。
小程序端请求封装与数据渲染
在小程序项目根目录创建utils/api.js,封装请求方法:
const BASE_URL = 'https://你的域名/api';
function request(path) {
return new Promise((resolve, reject) => {
wx.request({
url: BASE_URL + path,
success: res => resolve(res.data),
fail: err => reject(err)
});
});
}
module.exports = { request };
然后在页面中调用:
const { request } = require('../../utils/api.js');
Page({
data: { list: [] },
onLoad() {
request('/articles').then(res => {
this.setData({ list: res.data });
});
}
});
在WXML中用wx:for渲染列表即可。
注意图片字段需要拼接完整URL,Strapi返回的图片路径通常不包含域名。
多端发布与避坑要点
一套内容多端发布的关键在于接口地址统一。
如果同时有网站和小程序,建议将API域名配置为同一个,网站用fetch请求,小程序用wx.request,数据源完全一致。
常见坑点:
- 域名未备案或未配置:小程序要求请求域名必须HTTPS且已备案,开发阶段可在开发者工具中勾选“不校验合法域名”。
- 富文本渲染:Strapi富文本返回的是Markdown或HTML,小程序不能用
rich-text直接渲染HTML标签,建议改用Markdown解析库如towxml。 - 图片跨域:如果图片存储在Strapi本地,需确保服务器开启了静态资源访问,并在小程序后台将图片域名加入downloadFile合法域名。
- 接口缓存:内容更新后小程序可能仍显示旧数据,可在请求时加时间戳参数
?t=${Date.now()}绕过缓存。
效果验证与后续维护
完成以上步骤后,在Strapi后台修改一篇文章的标题,保存并发布。
刷新小程序页面,如果新标题出现,说明对接成功。
如果没变化,检查请求URL是否正确、权限是否开放、小程序是否开启了调试模式。
建议定期备份Strapi的数据库文件,默认位于项目根目录的.tmp/data.db。
如果内容量增大,可将数据库切换为MySQL或PostgreSQL,修改config/database.js中的连接配置即可。
无头CMS对接小程序,一套内容多端发布并不是复杂架构,核心就是API拉取和渲染。
先把单端跑通,再复制到其他端,维护成本会低很多。
常见疑问
Strapi必须部署在服务器上吗? 开发阶段可以本地运行,但小程序真机调试需要外网可访问的HTTPS地址,建议部署到云服务器并配置SSL证书。
内容更新后小程序需要重新发布吗? 不需要。
只要小程序请求的是远程API,内容变化会实时反映,无需提交新版本审核。
一套内容多端发布会不会影响加载速度? 如果接口响应慢,可以在小程序端做分页加载,或对图片使用CDN加速。
Strapi本身支持缓存插件,可根据实际访问量评估。