Javascript 使用中间件在Adonisjs中定义响应结构

Javascript 使用中间件在Adonisjs中定义响应结构,javascript,response,middleware,adonis.js,Javascript,Response,Middleware,Adonis.js,我想用最简单的方式定义请求的响应结构,首先想到的是中间件。 我的端点正在正确返回响应内容: {{base_url}}/users返回用户列表: { [ { "id": 44, "name": "some name" [...] } ] } 我想(在所有请求中)添加字段status和data(或我想添加的任何其他字段),如下所示: { "status": 200, "data": [ { "id": 44,

我想用最简单的方式定义请求的响应结构,首先想到的是中间件。 我的端点正在正确返回响应内容:

{{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文档和论坛,但没有适合我需要的答案


欢迎任何帮助

您可以通过扩展核心来扩展
响应
。最简单的方法是在
start
文件夹中创建一个文件,并将其命名为
hooks.js
,然后将下面的内容复制粘贴到其中:

const{hooks}=use(“@adonisjs/ignitor”)
const Response=use('Adonis/Src/Response')
hooks.after.providersBooted(()=>{
宏('customJson',函数(状态、数据){
this.status(status).json({
地位
数据
})
})
})
这段代码扩展了
Response
模块,并向其添加了
customJson
方法,该方法包含两个参数,
status
data
,并将它们发送回客户端

在这里您可以看到如何使用它:

Route.get('/users',async({response})=>{
让status=''//随你的便
让数据=“”//随你所需
返回response.customJson(状态、数据)
})

我真的很感激,这是我想要的80%。在我批准之前还有一件事,我可以从请求本身获取状态码而不是硬编码状态码吗?比如
返回response.customJson(response.statusCode,data)
不客气。请求模块中没有“状态”参数!响应状态完全对应于响应本身并依赖于它。如果要响应“未经授权的访问”,应将状态设置为403,以此类推。因此,您需要在任何时候使用它时对其进行硬编码。如果您得到
找不到模块'Adonis/Src/Response
错误,请将
const Response=use('Adonis/Src/Response'))
providersBooted的回调中的行。如何使用customJson进行控制器/方法关闭?@AymaneShuichi,正如我所说的,只需使用
response。customJson(状态、数据)