Как расширить класс ответов AdonisJS?

#javascript #node.js #adonis.js

#javascript #node.js #adonis.js

Вопрос:

Когда пользователь создает сообщение в моем приложении RESTful, я хочу установить код статуса ответа равным 201.

Я следовал документации и создал start/hooks.js следующее:

 'use strict'                                                                                                                      

const { hooks } = require('@adonisjs/ignitor')                                                                                                   

hooks.after.httpServer(() => {                                                                                                                   
  const Response = use('Adonis/Src/Response')                                                                                                    

  Response.macro('sendStatus', (status) => {                                                                                                     
    this.status(status).send(status)                                                                                                             
  })                                                                                                                                             
})
  

Теперь в моем PostController.js у меня есть это:

  async store( {request, response, auth} ) {
   const user = await auth.current.user
   response.sendStatus(201)
 }
  

Но я получаю 500 HTTP-кода в этой конечной точке.
Что я делаю не так?

Я заметил, что при запуске Response.hasMacro('sendStatus') я получаю false.

Ответ №1:

На самом деле у adonis уже есть это из коробки для всех кодов ответов…

Просто напишите response.created(…..).

Вы также можете использовать, например: .BadRequest(), .NotFound() и т.д… Дополнительная информация о:https://adonisjs.com/docs/4.1/response#_descriptive_methods

Ответ №2:

Я решил эту проблему вчера:

 hooks.after.httpServer(() => {                                                                                                                   
  const Response = use('Adonis/Src/Response')                                                                                                    
  Response.macro('sendStatus', function (status) => {                                                                                                     
    this.status(status).send(status)                                                                                                             
  })                                                                                                                                             
})
  

Комментарии:

1. Проверьте мой ответ… Это вообще не нужно. Вы добавляете хук, который не нужен.

2. Извините, я не проверил ссылку, которой вы поделились. Я отклоняю свой ответ и принимаю ваш. Спасибо