adonis/updateQs注意事項


🔮 事件の起因



adonisの公式ドキュメントでは、updateQsに関する内容を上記のように表示できます.
条件付き検索の有効性チェックのためにupdateQsを利用した.
JSONに入る条件をupdateQsで解析し,adonisのvalidatorを利用した.
しかし、サイトにはページが変わらないという問題が発生しました.
2ページ、3ページのクエリーをキャンセルしても、画面には1ページしか表示されません.

🔮 事情を知る


public async searchItem({ request }: HttpContextContract) {
    console.log(request.input('page')) // 여기서는 잘 나옴
    console.log(request.input('perPage')) // 여기서는 잘 나옴
    
    if (request.input('filters')) {
      request.updateQs({filters: JSON.parse(request.input('filters'))})
    }
    await Validator.searchItemValidator(request)
    
    console.log(request.input('page')) // undefined로 찍힘
    console.log(request.input('perPage')) // undefined로 찍힘
    return 검색 결과
  }
コードは上記のように記述されています./search?page=2&perPage=10&filters={"color":"yellow"}このようなリクエストを受けると、色が黄色のデータが2ページ目に送信されます.
しかし、updateQsを適用する前に、データはコンソールに記録されます.
適用後未定義として認定される.
QQを更新するだけで、残りの部分は失われます.
すべてのクエリーを更新する必要があります.

🔮 試行1(失敗)


updateQsではなくJSONフィルタです.解析して別のvalidatorに入れる方法
adonisの場合、validatorはリクエストタイプのデータのみを書き込むことができます.
このように行う場合はvalidatorを直接カスタマイズできます...->協力が非常に不便だ

🔮 試行2(成功)


すべてのクエリーを更新するには、次の手順に従います.
要求フォーマットデータを割り当て、加工後EQsを更新する これは適用可能な方法です.
// 이전코드
request.updateQs({filters: JSON.parse(request.input('filters'))})

// 새로 작성한 코드
let data = request.all() //{ page: '2', perPage: '10', filters: '{"color":"yellow"}' }
data['filters'] = JSON.parse(request.input('filters'))
request.updateQs(data)
このように改めると,仕事は正常で間違いない.

🔮 ポスト


試し1は私が考えた方法です.
試し2は同僚が思いついた方法です.(最高!!)
公式文書にもupdateQsに関する部分が1つしかありませんが、
上手に使えない.
これは私が他のソースコードを参考にして把握したレベルです.
試してみたくない2の私自身...ㅠ
既存のコードを表示するときは、オブジェクトを挿入すると、そのオブジェクトがリクエスト内で更新されることに気づく必要があります.request.all()を使っているのも印象的でした.
時間があるときは、正式な書類を隅々まで読みます.
2を試してみた同僚が最高だとすぐに思いました.
真剣に受け入れてメモしておくと、2を思いつく開発者になります.