我正在尝试弄清楚如何将 Node.js WPAPI 与 WordPress.com 上托管的 WordPress 博客一起使用。
您可能知道 Wordpress.com 网站没有典型的
/wp-json
端点;相反,您可以在 https://public-api.wordpress.com/wp/v2/sites/MYSITE.wordpress.com
上找到 Wordpress.com JSON REST API,例如https://public-api.wordpress.com/wp/v2/sites/amazingstartupguide.wordpress.com
我正在使用适用于 Node.js 版本的 WPAPI
2.0.0-alpha.1
以及 WPAPI 文档中使用的基于 promise 的 v2 语法:
import WPAPI from 'wpapi'
const siteSlug = 'amazingstartupguide'
const siteUrl = `https://public-api.wordpress.com/wp/v2/sites/${siteSlug}.wordpress.com`
const wp = new WPAPI({ endpoint: siteUrl })
console.log('wp:', wp);
console.log('await wp.posts().get():', await wp.posts().get())
第一个
console.log
输出一个看起来健康的 WPAPI 对象,但是当获取 posts
时,我收到错误:
TypeError: this.transport.get is not a function
如果我将导入更改为:
import WPAPI from 'wpapi/superagent'
我得到:
Error: {
"code": "rest_no_route",
"message": "No route was found matching the URL and request method.",
"data": { "status": 404 }
}
该怎么办?
看起来 WPAPI 库不再被积极维护,尽管遵循了文档,但错误仍然发生。相反,我使用 axios 编写了下面的代码,这将完成您想要做的事情。使用 axios,您只需为任何 WordPress 站点提供正确的 URL,它就会为您获取数据。这种方法更容易处理不遵循 WPAPI 期望的标准结构的 API,特别是因为 WPAPI 可能尚未更新以正确处理这些 URL。
import axios from 'axios';
const siteSlug = 'amazingstartupguide';
const siteUrl = `https://public-api.wordpress.com/wp/v2/sites/${siteSlug}.wordpress.com/posts`;
(async () => {
try {
const response = await axios.get(siteUrl);
const posts = response.data;
console.log('Posts:', posts);
} catch (error) {
console.error('Error fetching posts:', error.response ? error.response.data : error.message);
}
})();