首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自定义标记插件在Hexo中呈现获取的数据?

如何使用自定义标记插件在Hexo中呈现获取的数据?
EN

Stack Overflow用户
提问于 2019-07-25 15:59:00
回答 1查看 179关注 0票数 1

我正在使用Hexo构建一个基于标记的在线文档,但是我想通过呈现网络设备输出命令来扩展它的功能。

更清楚的是,我不想在代码块中复制粘贴命令及其结果,而是在呈现页面之前使用http获取结果。

我已经编写了负责运行所需命令并在web服务器中公开其结果的软件。

它所做的就是发送一个包含结果的字符串。只是短信而已。

我想要的只是在页面中使用Hexo标记插件呈现这个结果。

我现在真的处于开发阶段,所以我只使用默认的主题(“景致”)。由于我正在开发一个旧的Arch版本(4.19.8-arch1-1-ARCH),所以我使用的是Docker。

容器内的文件结构:

代码语言:javascript
复制
.
|-- _config.yml
|-- package.json
|-- scaffolds
|   |-- draft.md
|   |-- page.md
|   `-- post.md
|-- scripts
|   `-- index.js
|-- source
|   `-- _posts
|       `-- hello-world.md
`-- themes

Dockerfile

代码语言:javascript
复制
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"]

你好-世界。

代码语言:javascript
复制
{% cli_exporter "output" "show_version" "some_router" %}

自定义插件(script/index.js)

代码语言:javascript
复制
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),我就会得到预期的结果。但在生成的网站中没有呈现。

EN

回答 1

Stack Overflow用户

发布于 2019-07-26 09:46:34

我想我的javascript有点生锈了。我解决了这个问题,增加了回报。

代码语言: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});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57206064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档