本地运行Parsoid-JSAPI仍调用公共API,指定localhost报错求助
首先肯定你的方案是对的——本地部署Parsoid后用JSAPI解析维基文本完全没问题,你碰到的错误是因为Parsoid-JSAPI默认不知道怎么映射localhost这个域名到你的本地服务,得手动给它指明白。
下面给你一步步解决的办法:
1. 直接在parse调用里指定本地Parsoid的API端点
你之前只传了domain: 'localhost',但JSAPI不知道这个域名对应的API地址是啥,所以报错。解决办法是在参数里加上apiURL,直接指向你本地Parsoid的REST API接口:
Parsoid.parse("你的维基文本内容", { apiURL: 'http://localhost:8000/api/rest_v1/page/html/', domain: 'localhost' }) .then(html => { console.log('解析后的HTML:', html); }) .catch(err => { console.error('解析出错:', err); });
注意:如果你的本地Parsoid服务器不是用默认的8000端口,记得把URL里的端口改成你自己的。
2. 确保本地Parsoid服务器的配置正确
接下来要检查你本地Parsoid的localSettings.js配置文件,得让它能识别localhost这个wiki,并且允许跨域请求(如果你的JS代码是在浏览器里跑的话)。举个基础配置例子:
module.exports = { // 配置你的本地wiki映射 wikis: { "localhost": { domain: "localhost", // 如果你没有本地部署MediaWiki,只是纯解析维基文本,可以把apiURI设为占位或配置Parsoid不依赖外部API apiURI: "http://localhost:8000/w/api.php", defaultWiki: "localhost" } }, // Parsoid服务器监听的端口,要和上面apiURL里的一致 serverPort: 8000, // 允许跨域请求,方便前端调试 allowCORS: ['*'] };
如果你的场景只是解析不含复杂模板、外部资源的纯维基文本,还可以简化配置,比如关闭对MediaWiki API的依赖;但如果要处理带模板、引用的内容,还是需要搭配本地MediaWiki实例使用。
3. 理解Parsoid-JSAPI的默认逻辑
Parsoid-JSAPI原本是为对接Wikimedia的公共服务设计的,所以它内置了维基百科等域名的API映射,但localhost不在默认列表里,所以必须手动告诉它对应的API地址,不然就会出现你碰到的"No API URI available"错误。
总结一下:你的本地解析方案完全可行,核心就是给JSAPI明确指定本地Parsoid的API地址,同时确保Parsoid服务器本身的配置能正确响应你的请求。
内容的提问来源于stack exchange,提问作者prespic

