XBlog开发手册 XBlog开发手册
  • 快速入门
  • API参考
  • 快速入门
  • API参考
GitHub (opens new window)
  • 快速入门
  • API参考
  • 快速入门
  • API参考
GitHub (opens new window)
  • 快速入门

    • 简介
    • 路由
      • 最简单的接口
      • 设置其他路径
      • 使用POST或者其他请求
      • 获取请求参数
        • URL参数
        • 请求体参数
        • 路径参数
      • 返回不同的状态码
      • 注册管理员路由
    • 数据库
    • 网络
    • 爬虫
    • 定时任务
    • 文件读取
    • 邮件
    • 工具包
    • 界面
  • API参考

  • 插件开发
  • 快速入门
小游
2021-07-26

路由

通过路由可以在博客系统上注册一个url接口,当访问这个接口时,就会调用对应的逻辑。

记得在插件的auth里面加上 router才能使用路由接口

# 最简单的接口

首先我们自己注册一个插件用于测试,plugins.json 文件内容如下

{
  "name": "测试",
  "unique": "test",
  "description": "测试插件,用于测试插件的各种功能",
  "version": "1.0",
  "author": "小游",
  "site": "https://xiaoyou66.com",
  "auth": ["router"]
}
1
2
3
4
5
6
7
8
9

index.js 的内容如下

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("GET","",function(context){
    router.response.ResponseOk(context,{message: "你好,世界!"})
})
1
2
3
4
5
6

这里简单解释一下每个参数的作用,第一个表示路由的请求方式,支持 GET、POST、PUT、DELETE。

第二个参数是路径,留空表示根路径,不留空那么就可以设置其他的路径。

第三个参数是回调函数,当我们访问这个路径的时候就会触发这个回调函数,这个回调函数里面就写路由的处理逻辑。

回调函数的context参数必须要有,这个表示上下文,一般我们获取请求的参数或者返回内容时都会用到

这样我们就完成了一个最简单的路由功能,下面我们来调用一下(每次修改内容后记得点击重载插件~),可以看到,成功返回的我们设置的内容

image-20210727080700586

# 设置其他路径

如果我们想注册多个路由怎么办,可以使用路径这个参数

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("GET","/hello",function(context){
    router.response.ResponseOk(context,{message: "你也好!"})
})
1
2
3
4
5
6

比如我们这里加上了 \hello这个参数,下面我们这里访问的时候也需要在后面加上hello

image-20210727081637361

# 使用POST或者其他请求

路由不仅可以设置GET请求,还可以设置POST、PUT、DELETE请求,这里以POST为例

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("POST","",function(context){
    router.response.ResponseOk(context,{message: "这个是POST请求!"})
})
1
2
3
4
5
6

post请求不方便用浏览器来调试,这里我使用的是postman,可以看到插件也返回的正确的值!

image-20210727082006140

如果此时我们使用GET请求去访问,那么就会出现404的错误

image-20210727082421631

# 获取请求参数

有时候我们需要获取用户传递进来的参数,我们可以使用context对象来获取,参数分为URL参数、请求体参数、路径参数

# URL参数

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("GET","",function(context){
    let name = context.Query("name")
    router.response.ResponseOk(context,{message: name})
})
1
2
3
4
5
6
7

这里我们就用到了回调函数的context对象,我们通过context的Query方法来获取URL参数,比如这里我们获取了name参数,在请求的时候,我们也传入一下name的参数

image-20210727082835697

如果不传的话,就为空

image-20210727083035088

# 请求体参数

这里需要使用router提供的getPostJson方法,比如这里我们注册一个POST路由

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("POST","",function(context){
    let data = router.getPostJson(context)
    router.response.ResponseOk(context,data)
})
1
2
3
4
5
6
7

我们的请求参数如下

image-20210727083746640

返回结果

image-20210727083758234

# 获取form格式的数据

有时候我们传的不是json格式,而是form表单格式,那么我们可以使用PostForm方法,代码如下

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("POST","",function(context){
    let name = context.PostForm("name")
    router.response.ResponseOk(context,{name:name})
})
1
2
3
4
5
6
7

image-20210727084310212

# 路径参数

如果restful熟悉的话,那么路径参数就应该有了解。我们可以直接在URL里面设置不同的路径,这样我们就根据不同的url返回不同的值,代码如下

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("GET","/:name/age",function(context){
    let name = context.Param("name")
    router.response.ResponseOk(context,{message: name+"的年龄为21"})
})
1
2
3
4
5
6
7

如果要使用路径参数,那么就直接用: 来进行标识,然后使用Param方法就可以获取到参数了

image-20210727084656757

# 返回不同的状态码

如果执行没啥问题的话,一般都是返回200状态码,如果我们想返回404或者500的时候怎么做呢,使用router.response 函数,下面这个是所有的状态码,返回的都是JSON格式,只有ResponseHtml才是返回html格式

 // 200返回数据成功
 ResponseOk(context,data){},
 // 201创建数据成功
 ResponseCreated(context,data){},
 // 204删除数据成功(删除数据一般不需要返回数据)
 ResponseNoContent(context){},
 // 400错误,一般是用户输入的参数有问题
 ResponseBadRequest(context,msg = ''){},
 // 401错误,用户没有权限
 ResponseUnauthorized(context,msg = ''){},
 // 403错误,用户禁止访问
 ResponseForbidden(context,msg = ''){},
 // 404错误,没有这个资源
 ResponseNotFound(context,msg = ''){},
 // 422错误,用户在创建对象的时候发生错误
 ResponseUnProcessEntity(context,msg = ''){},
 // 500错误,服务器错误
 ResponseServerError(context,msg = ''){},
 // 返回html对象
 ResponseHtml(context,html){},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

下面简单举个栗子

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("GET","/:name/age",function(context){
    let name = context.Param("name")
    router.response.ResponseServerError(context,"服务异常")
})
1
2
3
4
5
6
7

image-20210728081334718

# 注册管理员路由

顾名思义,管理员路由就是访问这个接口需要管理员权限,普通用户无法访问,常用于插件的后台功能设置,比如下面我们注册一个管理员路由

// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerAdminRouter("GET","",function(context){
    let name = context.Param("name")
    router.response.ResponseOk(context,{message:"ok"})
})
1
2
3
4
5
6
7

image-20210728082039698

如果直接访问的话就会提示权限不足,需要登录,加上userId和token后就可以访问了

image-20210728082150925

编辑 (opens new window)
上次更新: 2021/07/28, 09:01:16
简介
数据库

← 简介 数据库→

Theme by Vdoing | Copyright © 2021-2021 小游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式