路由
通过路由可以在博客系统上注册一个url接口,当访问这个接口时,就会调用对应的逻辑。
记得在插件的auth里面加上
router
才能使用路由接口
# 最简单的接口
首先我们自己注册一个插件用于测试,plugins.json
文件内容如下
{
"name": "测试",
"unique": "test",
"description": "测试插件,用于测试插件的各种功能",
"version": "1.0",
"author": "小游",
"site": "https://xiaoyou66.com",
"auth": ["router"]
}
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: "你好,世界!"})
})
2
3
4
5
6
这里简单解释一下每个参数的作用,第一个表示路由的请求方式,支持 GET
、POST
、PUT
、DELETE
。
第二个参数是路径,留空表示根路径,不留空那么就可以设置其他的路径。
第三个参数是回调函数,当我们访问这个路径的时候就会触发这个回调函数,这个回调函数里面就写路由的处理逻辑。
回调函数的context参数必须要有,这个表示上下文,一般我们获取请求的参数或者返回内容时都会用到
这样我们就完成了一个最简单的路由功能,下面我们来调用一下(每次修改内容后记得点击重载插件~),可以看到,成功返回的我们设置的内容
# 设置其他路径
如果我们想注册多个路由怎么办,可以使用路径这个参数
// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("GET","/hello",function(context){
router.response.ResponseOk(context,{message: "你也好!"})
})
2
3
4
5
6
比如我们这里加上了 \hello
这个参数,下面我们这里访问的时候也需要在后面加上hello
# 使用POST或者其他请求
路由不仅可以设置GET请求,还可以设置POST
、PUT
、DELETE
请求,这里以POST
为例
// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("POST","",function(context){
router.response.ResponseOk(context,{message: "这个是POST请求!"})
})
2
3
4
5
6
post请求不方便用浏览器来调试,这里我使用的是postman,可以看到插件也返回的正确的值!
如果此时我们使用GET
请求去访问,那么就会出现404的错误
# 获取请求参数
有时候我们需要获取用户传递进来的参数,我们可以使用context对象来获取,参数分为URL参数、请求体参数、路径参数
# URL参数
// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("GET","",function(context){
let name = context.Query("name")
router.response.ResponseOk(context,{message: name})
})
2
3
4
5
6
7
这里我们就用到了回调函数的context对象,我们通过context的Query方法来获取URL参数,比如这里我们获取了name参数,在请求的时候,我们也传入一下name的参数
如果不传的话,就为空
# 请求体参数
这里需要使用router提供的getPostJson
方法,比如这里我们注册一个POST路由
// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerRouter("POST","",function(context){
let data = router.getPostJson(context)
router.response.ResponseOk(context,data)
})
2
3
4
5
6
7
我们的请求参数如下
返回结果
# 获取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})
})
2
3
4
5
6
7
# 路径参数
如果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"})
})
2
3
4
5
6
7
如果要使用路径参数,那么就直接用:
来进行标识,然后使用Param
方法就可以获取到参数了
# 返回不同的状态码
如果执行没啥问题的话,一般都是返回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){},
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,"服务异常")
})
2
3
4
5
6
7
# 注册管理员路由
顾名思义,管理员路由就是访问这个接口需要管理员权限,普通用户无法访问,常用于插件的后台功能设置,比如下面我们注册一个管理员路由
// 获取路由API接口
const router =xBlog.router
// 注册路由
router.registerAdminRouter("GET","",function(context){
let name = context.Param("name")
router.response.ResponseOk(context,{message:"ok"})
})
2
3
4
5
6
7
如果直接访问的话就会提示权限不足,需要登录,加上userId和token后就可以访问了