javascript - 使用中间件在 Adonisjs 中定义响应结构
问题描述
我想以最简单的方式定义我的请求的响应结构,而我首先想到的就是中间件。我的端点正确返回响应内容:
{{base_url}}/users
返回用户列表:
{
[
{
"id": 44,
"name": "some name"
[...]
}
]
}
我想要做的(在所有请求中)是添加字段status
和data
(或我想添加的任何其他字段),如下所示:
{
"status": 200,
"data": [
{
"id": 44,
"name": "some name"
[...]
}
]
}
我创建了一个等待解决的中间件,但我无法获取内容,也无法为其添加一些属性。
[...]
async handle ({request, response}, next) {
await next()
const content = response._lazyBody.content
content.status = response.response.statusCode
}
[...]
我知道这行不通,但我想要类似的东西。我查看了 Adonis 文档和论坛,但没有适合我需要的答案。
欢迎任何帮助
解决方案
您可以Response
通过扩展核心来扩展。最简单的方法是在文件夹中创建一个文件start
并为其命名,hooks.js
然后将以下内容复制并粘贴到其中:
const { hooks } = use('@adonisjs/ignitor')
const Response = use('Adonis/Src/Response')
hooks.after.providersBooted(() => {
Response.macro('customJson', function (status, data) {
this.status(status).json({
status,
data
})
})
})
这段代码扩展了Response
模块并向customJson
其添加方法,该方法接受两个参数,status
和data
,并将它们发送回客户端。
在这里你可以看到如何使用它:
Route.get('/users', async ({ response }) => {
let status = ''// whatever you want
let data = ''// whatever you want
return response.customJson(status, data)
})
推荐阅读
- java - 仅当建筑物完全在 cameraView 内时才显示 GroundOverlay
- python - 删除重复数据框保留第一个或不为空值
- flutter - Where to add custom colors in ThemeData in Flutter
- python - Python 输出 RETURN 在 Api 密钥短信脚本中不起作用
- grunt-contrib-uglify - grunt-contrib-uglify 到 grunt-terser 迁移
- alignment - 使用 bwa 的未映射读取
- javascript - 为什么我的 codepen.io 代码在我的括号实时预览中不起作用?
- python - 是否可以从对象列表中引用对象?
- .net - Azure blob 触发功能,不起作用并抱怨容器/blob 格式不正确?
- c++ - cin 作为没有流缓冲区对象引用的 istream 对象