如何从Heroku上的Node.js应用自动向WordPress上传JSON文件?
实现Heroku Node.js应用自动推送JSON文件到WordPress的方案
完全可以用WordPress REST API实现这个自动化流程,下面是具体的步骤和细节:
一、准备工作:启用并配置WordPress REST API
WordPress默认已经启用REST API,但要进行POST操作(创建/更新内容)必须做身份验证,推荐用应用密码(WordPress 5.6及以上版本支持),操作如下:
- 登录WordPress后台,进入「用户」→「个人资料」
- 找到「应用密码」板块,输入一个名称(比如Heroku-Data-Push),点击「添加应用密码」
- 保存生成的16位密码(只会显示一次,别丢了)
二、Node.js端实现推送逻辑
在你的Heroku Node.js应用里,添加推送JSON文件的代码,核心步骤如下:
1. 读取本地JSON文件
用Node.js内置的fs模块读取生成的JSON文件:
const fs = require('fs'); const path = require('path'); // 读取JSON文件 const jsonFilePath = path.join(__dirname, 'your-generated-file.json'); const jsonContent = fs.readFileSync(jsonFilePath, 'utf8'); const data = JSON.parse(jsonContent);
2. 构造REST API请求
用axios或者原生fetch发送POST请求到WordPress REST API,这里以axios为例:
首先安装axios:
npm install axios
然后编写请求代码:
const axios = require('axios'); // 从Heroku环境变量获取敏感信息(别硬编码!) const WP_USER = process.env.WP_USER; const WP_APP_PASSWORD = process.env.WP_APP_PASSWORD; const WP_API_URL = 'https://your-wp-domain.com/wp-json/wp/v2/posts'; // 以创建帖子为例,也可以用自定义端点 // 构造请求头(Basic Auth) const authHeader = `Basic ${Buffer.from(`${WP_USER}:${WP_APP_PASSWORD}`).toString('base64')}`; // 构造请求体:把JSON内容作为帖子内容,也可以根据需求自定义字段 const postData = { title: `数据推送 ${new Date().toISOString()}`, content: JSON.stringify(data, null, 2), // 格式化JSON方便阅读 status: 'publish' // 直接发布,或者设为draft草稿 }; // 发送请求 async function pushToWordPress() { try { const response = await axios.post(WP_API_URL, postData, { headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' } }); console.log('推送成功,帖子ID:', response.data.id); } catch (error) { console.error('推送失败:', error.response?.data || error.message); } } // 在生成JSON文件后调用这个函数 pushToWordPress();
3. 配置Heroku环境变量
在Heroku后台的应用「设置」→「配置变量」里添加:
WP_USER:你的WordPress用户名WP_APP_PASSWORD:之前生成的应用密码WP_API_URL:你的WordPress REST API端点(比如帖子端点是https://your-domain.com/wp-json/wp/v2/posts)
三、自动化触发方式
- 即时触发:在Node.js应用生成JSON文件的代码执行完成后,直接调用
pushToWordPress()函数,生成完毕立刻推送。 - 定时触发:如果是定时生成JSON文件,可以用
node-schedule包实现定时任务,或者用Heroku的内置「Scheduler」(免费额度够用),定时运行你的推送脚本。
四、注意事项
- 如果需要推送JSON文件作为附件(而不是帖子内容),可以调用媒体端点
/wp-json/wp/v2/media,把JSON文件作为表单数据上传,请求头设为Content-Type: multipart/form-data。 - 检查WordPress的PHP配置:如果JSON文件过大,需要调整
upload_max_filesize和post_max_size参数(SiteGround和WP Engine都支持在后台或通过客服调整)。 - 测试阶段先在本地用curl验证API可用性:
curl -X POST -u "你的用户名:应用密码" https://your-wp-domain.com/wp-json/wp/v2/posts \ -H "Content-Type: application/json" \ -d '{"title":"测试推送","content":"{\"test\":\"data\"}","status":"publish"}'
内容的提问来源于stack exchange,提问作者Jbleasdale
相关产品推荐
相关产品推荐

