关于使用halo接口api发布文章的使用说明
文档接口
halo博客附带的后端接口是可以直接调用的,其中创建文章的接口是http://localhost:8090/api/admin/posts
1,对应的参数结构如下所示
参数结构
//application/json
{
- "categoryIds": [
- 0
],
- "content": "string",
- "createTime": "2019-08-24T14:15:22Z",
- "disallowComment": true,
- "editorType": "MARKDOWN",
- "keepRaw": true,
- "metaDescription": "string",
- "metaKeywords": "string",
- "metas": [
- {
- "key": "string",
- "postId": 0,
- "value": "string"
}
],
- "originalContent": "string",
- "password": "string",
- "slug": "string",
- "status": "DRAFT",
- "summary": "string",
- "tagIds": [
- 0
],
- "template": "string",
- "thumbnail": "string",
- "title": "string",
- "topPriority": 0
}
参数说明
对于比较重要的便是对于originContent
和content
的区别,顾名思义 originContent
是原始内容,指的是markdown格式的内容,而content
则是将markdown渲染为html之后的内容
当keepRaw
参数为false表示用markdown进行渲染,反之则使用html进行渲染
- 对于数学公式而言,需要直接渲染html,因为博客需要自定义引入对应的渲染数学公式的js库后才能正常渲染数学公式,而且这个过程还比较慢,所以建议直接就提前把渲染好的html进行展示
- 另一方面,由于原渲染markdown的库中渲染mermaid代码时用到了
document
对象,在服务端node环境下执行会报错,考虑到本人并不是常用mermaid,这个问题就暂时搁置下来了
实现过程
踩坑
这个过程还是比较痛苦的,因为对于模块化了解的不是很多,文档说的也不是很清楚,所以花了很多时间踩坑,我们首先去官网看文档, 只有如下寥寥几句
由于我是需要相对应的接口在laravel项目中调用,为了便于使用js库,我又新建了一个express项目,这里坑就来了,首先这个express用的是CommonJs规范,是不能使用这种import的引入格式的,然而直接使用require格式的引入也不行,他会提示错误,这个错误在网上找了半天,也没有得到解决方案,有说是node版本过低,也有说是变量命名不规范,但是这个项目文件名就带有-
,我能有什么办法!?
解决方案
无奈之下,我们只能采取import的导入方式,由于这种模块化的导入方式是ES6的方式,我们需要在package.json
中进行配置,即在根标签下加上
{
...
"type": "module",
...
}
只在项目下面的package.json
还不够,我们还需要去对应的node_modules
中对应的package.json
中加上
至此,才算是正常引入了这个解析markdown的库
封装接口
import express from "express";
import { markdownIt as markdownRender } from "@halo-dev/markdown-renderer";
const app = express();
app.use(express.json()); // for parsing application/json
app.use(express.urlencoded({ extended: true }));
const port = 3000;
app.get("/", (req, res) => {
const result = "$a$";
console.log(result);
res.send(result);
});
app.post("/md", (req, res) => {
let data = {
res: markdownRender.render(req.body.msg),
};
res.json(data);
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
封装完后调用对应的
baseUrl/md
,post请求将md内容传进去,就会返回对应解析后的的html格式的内容
相关链接
Markdown Renderer,md渲染库
Creates a post,对应的创建文章的接口
Footnotes
需要注意的是这里的localhost指的是本地ip,对应的端口也会根据配置文件的不同而不同 ↩