Node.js首次连接WP REST API无法获取产品问题求助
问题排查与修复方案
1. 核心问题分析
你的代码存在两个关键问题:
- 异步请求的结果未被处理:
getAsync返回Promise后,then里仅解析JSON但未做任何输出/存储操作,同时缺少错误捕获逻辑,导致即使请求失败也无任何提示。 - 依赖包可能过时:
woocommerce-api是较旧的第三方包,官方已推出维护更及时的@woocommerce/woocommerce-rest-api,旧包可能存在兼容性问题。
2. 现有代码快速修复
修改代码,添加错误捕获并处理请求结果:
const express = require("express"); const app = express(); const cors = require("cors"); const mysql = require("mysql2"); var WooCommerceAPI = require("woocommerce-api"); var WooCommerce = new WooCommerceAPI({ url: "http://mysite.local", consumerKey: "my_key", consumerSecret: "my_secret", wpAPI: true, version: "wc/v3" }); // 添加错误捕获,处理请求结果 WooCommerce.getAsync("products") .then(function(result) { const products = JSON.parse(result.toJSON().body); console.log("获取到的产品数据:", products); // 打印结果到控制台 }) .catch(function(error) { console.error("请求错误:", error); // 捕获并打印错误信息 }); app.listen("3001", () => { console.log("Server is running on port 3001"); });
运行修改后的代码,控制台会输出产品数据或具体错误信息,帮助定位问题。
3. 推荐:升级到官方REST API包
官方维护的@woocommerce/woocommerce-rest-api兼容性更好,使用方式更简洁,建议替换旧包:
步骤1:安装新包
npm uninstall woocommerce-api npm install @woocommerce/woocommerce-rest-api
步骤2:重写代码
const express = require("express"); const app = express(); const cors = require("cors"); const mysql = require("mysql2"); const WooCommerceRestApi = require("@woocommerce/woocommerce-rest-api").default; const api = new WooCommerceRestApi({ url: "http://mysite.local", consumerKey: "my_key", consumerSecret: "my_secret", version: "wc/v3", // 本地环境可添加此项禁用SSL验证(生产环境请勿使用) axiosConfig: { httpsAgent: new (require('https').Agent)({ rejectUnauthorized: false }) } }); // 使用async/await简化异步逻辑 async function fetchProducts() { try { const response = await api.get("products"); console.log("产品数据:", response.data); } catch (error) { console.error("请求失败:", error.response?.data || error.message); } } fetchProducts(); app.listen("3001", () => { console.log("Server is running on port 3001"); });
4. 额外排查点
- 检查本地环境是否能正常访问
http://mysite.local,可通过curl http://mysite.local/wp-json/wc/v3/products -u my_key:my_secret测试命令行请求是否正常。 - 确认WooCommerce设置中,REST API已启用,且密钥拥有
read_products权限。
内容的提问来源于stack exchange,提问作者Shahrukh Altaf
相关产品推荐
相关产品推荐

