我正在使用Hexo构建一个基于标记的在线文档,但是我想通过呈现网络设备输出命令来扩展它的功能。
更清楚的是,我不想在代码块中复制粘贴命令及其结果,而是在呈现页面之前使用http获取结果。
我已经编写了负责运行所需命令并在web服务器中公开其结果的软件。
它所做的就是发送一个包含结果的字符串。只是短信而已。
我想要的只是在页面中使用Hexo标记插件呈现这个结果。
我现在真的处于开发阶段,所以我只使用默认的主题(“景致”)。由于我正在开发一个旧的Arch版本(4.19.8-arch1-1-ARCH),所以我使用的是Docker。
容器内的文件结构:
.
|-- _config.yml
|-- package.json
|-- scaffolds
| |-- draft.md
| |-- page.md
| `-- post.md
|-- scripts
| `-- index.js
|-- source
| `-- _posts
| `-- hello-world.md
`-- themesDockerfile
FROM node:8.11.2
WORKDIR /gtd
ADD . .
RUN npm install hexo-cli -g
RUN npm install hexo-server --save
RUN npm install node-fetch --save
RUN npm install
CMD ["hexo", "server"]你好-世界。
{% cli_exporter "output" "show_version" "some_router" %}自定义插件(script/index.js)
const fetch = require("node-fetch");
hexo.extend.tag.register("cli_exporter", (args) => {
const hostname = "XX.YYY.ZZZ.WW:XXXX"
let endpoint, module, target
[endpoint, module, target] = args
const url = "http://" + hostname + '/' + endpoint
+ "?module=" + module + "&target=" + target
fetch(url)
.then(response => {
if (response.ok) {
return response.text()
.then(data => "<div>" + data + "</div>")
.catch(error => console.error(error))
}
return Promise.reject(new Error("response failed"))
})
.catch(error => Promise.reject(new Error(error.message)))
}, {async: true});我真的不能给你真正的主机名,因为它是私人软件,但它真的只是纯文本。
假设我想呈现来自思科路由器的show version结果。如果我在插件中console.log(data),我就会得到预期的结果。但在生成的网站中没有呈现。
发布于 2019-07-26 09:46:34
我想我的javascript有点生锈了。我解决了这个问题,增加了回报。
const fetch = require("node-fetch");
async function request(url) {
const response = await fetch(url)
const text = await response.text()
return text
}
hexo.extend.tag.register("cli_exporter", (args) => {
const hostname = "XX.YYY.ZZZ.WW:XXXX"
let endpoint, module, target
[endpoint, module, target] = args
const url = "http://" + hostname + '/' + endpoint
+ "?module=" + module + "&target=" + target
return request(url)
.then(data => {
return "<div>" + data + "</div>"
})
.catch(error => console.error(error))
}, {async: true});https://stackoverflow.com/questions/57206064
复制相似问题