VIDEO LESSON

NextRequestの使い方:URL・Cookie・本文から入力を取り出すの解説動画

再生時間 7:16動画を別のタブで開く ↗
動画の字幕・文字起こしを読む

再生中の字幕を濃い黒で表示し、一番上に追従します。字幕の行を選ぶと、その位置から再生できます。

  1. 0:00こんにちは。
  2. 0:00今回はネクストリクエストの使い方です。
  3. 0:03ネクストリクエストは、ブラウザーなどからサーバーへ届いた要望、つまりリクエストの中身を読むための仕組みです。
  4. 0:12ユーアールエルに入った検索条件、クッキー、そしてジェイソン形式の本文、この三つの入口から入力を取り出す方法を学びます。
  5. 0:21題材は、検索ワードを受け取って検証する、小さなエーピーアイです。
  6. 0:25前回、答えを返すネクストレスポンスを学びましたが、今回はその逆向き、届いた入力を読む側の話です。
  7. 0:33処理の流れを追いながら、初めての方も安心して聞いてください。
  8. 0:37まず正体を確認します。
  9. 0:39ネクストリクエストは、ウェブ標準のリクエストという仕組みを、ネクストジェイエス向けに拡張したエーピーアイです。
  10. 0:46代表的な使い場所は、アップルーターのルートハンドラーで、関数の第一引数として受け取ります。
  11. 0:52ネクスト・スラッシュ・サーバーから、型として読み込んで使います。
  12. 0:57この記事の例は、ネクストジェイエス十五以降の書き方に合わせ、タイプスクリプト五・二以降を前提にします。
  13. 1:03ページズルーターとは配置先も実行場所も違うため、プロジェクトのルーターとバージョンを先に確認してください。
  14. 1:10サーバー側でだけ動く仕組み、という点も押さえておきましょう。
  15. 1:14入力の入口は三つあります。
  16. 1:16一つ目は、リクエスト・ドット・ネクストユーアールエルで、ユーアールエル全体の情報や検索条件を読みます。
  17. 1:23二つ目は、リクエスト・ドット・クッキーズで、ブラウザーから送られてきたクッキーを読みます。
  18. 1:29三つ目は、リクエスト・ドット・ジェイソンで、ポストなどで送られた本文を解析します。
  19. 1:35本文の解析は時間がかかる処理なので、結果を待ってから使う、非同期の書き方になります。
  20. 1:41どの情報が、どの入口から入ってくるのか、この対応表を頭に入れておくと、コードを読むスピードがぐっと上がります。
  21. 1:48まずはこの三つをセットで覚えてください。
  22. 1:51題材の全体像です。
  23. 1:52アプリ、エーピーアイ、サーチデモというフォルダーに、ルート・ティーエスというファイルを作り、
  24. 1:57ゲットの処理を書きます。
  25. 2:02たとえば、検索ワードとしてリアクトがユーアールエルに付いて届いたら、サーバーはその値を取り出し、
  26. 2:09問題がないか検証してから、ワードと文字数をジェイソンで返します。
  27. 2:15これは本物の検索エンジンにつなぐ例ではなく、入力を安全に受け取る練習のための小さなエーピーアイです。
  28. 2:24ユーアールエルから値を読む、検証する、結果を返す、という三段階の流れを意識して、
  29. 2:28次のコードを見ていきましょう。
  30. 2:33記事のコードです。
  31. 2:34まず、ネクストユーアールエルのサーチパラムスにある、ゲットオールという命令で、
  32. 2:39キューという名前の値を全部取り出します。
  33. 2:44一つだけ読む命令と違い、同じ名前が二つ届いた場合も見逃しません。
  34. 2:49数が二つ以上なら、キューは一つだけ指定できます、というエラーとステータス四百を返します。
  35. 2:57次に、先頭の値を取り出し、トリムで前後の空白を除きます。
  36. 3:01値がない場合は空文字として扱う書き方も入っています。
  37. 3:05最後に、長さが八十を超えたら長すぎます、と四百を返し、通ればワードと文字数を返します。
  38. 3:13キャッシュコントロールのノーストアを付け、検証つきの応答として返す点も確認してください。
  39. 3:20二つの読み方を使い分けます。
  40. 3:22ゲットは、名前が一致する最初の値を一つだけ返し、無ければヌルを返します。
  41. 3:28ゲットオールは、一致する値を配列で全部返します。
  42. 3:32今回のように、重複した指定をエラーにしたい場合は、ゲットオールで数えてから判断するのが確実です。
  43. 3:40実行例を確認します。
  44. 3:42ユーアールエルにキュー・イコール・リアクトと付けて開くと、クエリにリアクト、
  45. 3:46カウントに五が返ります。
  46. 3:50リアクトは五文字なので、その数が文字数として返ってきたわけです。
  47. 3:56取る前に数える、という発想は、入力検証の基本として他の場面でも役立ちます。
  48. 4:02本文の読み方です。
  49. 4:03ポストでジェイソンが送られてきたら、アウェイト・リクエスト・ドット・ジェイソンで解析し、
  50. 4:08結果のオブジェクトから値を取り出します。
  51. 4:13フォーム送信の場合は、フォームデータという命令を使います。
  52. 4:17大切な注意点があります。
  53. 4:19本文は一度しか読めない流れとして扱い、繰り返し読めると考えないことです。
  54. 4:24必要な解析を一回だけ行い、その結果を使い回してください。
  55. 4:28ジェイソンとして読めない本文が届くこともあるため、実際のアプリでは、読み取りに失敗したときの応答も用意しておくと安心です。
  56. 4:37解析は一回、結果を使い回す、これが本文読み取りの鉄則です。
  57. 4:41クッキーの読み方です。
  58. 4:43リクエスト・ドット・クッキーズ・ドット・ゲットで、名前を指定して受信した値を取り出します。
  59. 4:50存在するかどうかだけなら、ハズという命令でも確認できます。
  60. 4:55ここで方向の区別が重要です。
  61. 4:57リクエスト側のクッキーは、あくまで受信した値を読むためのものです。
  62. 5:03ここを書き換えても、ブラウザーへ保存の指示は出ません。
  63. 5:07保存させたいときは、前回学んだように、返却するレスポンス側でセットクッキーを設定します。
  64. 5:15読むのはネクストリクエスト、書くのはネクストレスポンス、と方向で覚えると混同しません。
  65. 5:22安全面の大切な話です。
  66. 5:23ネクストリクエストという型が付いていても、検索条件やヘッダーの中身が、信頼できる情報に変わるわけではありません。
  67. 5:31ユーアールエルや本文は、利用者が自由に書き換えられる場所だからです。
  68. 5:35だからこそ、長さや値の範囲をサーバー側で検証します。
  69. 5:39あわせて、パスワードのような秘密の値をユーアールエルに入れないこと、データベースへ値を渡すときは、
  70. 5:45そのまま文字列をつなげず、パラメーター化という安全な渡し方を使うことも必要です。
  71. 5:50型は形の保証であって、信頼の保証ではない。
  72. 5:53この一文を覚えておいてください。
  73. 5:55実行環境と、自分で試す課題です。
  74. 5:58この例は、リクエストのたびにユーアールエルを読むサーバー処理を必要とするため、
  75. 6:04アウトプットにエクスポートを指定した静的ファイルだけの配信では実行できません。
  76. 6:10ネクストジェイエスのサーバー実行環境か、別のエーピーアイを用意してください。
  77. 6:16確認課題は四つです。
  78. 6:18キューがない場合、前後に空白がある場合、キューを重複させた場合、そして八十一文字を入れた場合で、
  79. 6:22結果を比べてみましょう。
  80. 6:27なお絵文字の長さは、見た目の文字数と一致しないことがあります。
  81. 6:32要件が文字数なのかバイト数なのかも、あわせて決めておくと実務で困りません。
  82. 6:38まとめです。
  83. 6:38ネクストリクエストの入口は、ユーアールエルを読むネクストユーアールエル、
  84. 6:43受信クッキーを読むクッキーズ、本文を解析するジェイソンの三つでした。
  85. 6:48検索条件の重複はゲットオールで数えて弾き、値がない場合や長すぎる場合に備えて検証してから使います。
  86. 6:55本文の解析は一回だけ行い、クッキーは読む側と返す側の方向を分けて考えます。
  87. 7:00そして、型が付いても入力は信頼せず、サーバー側で必ず確かめることが安全な実装につながります。
  88. 7:06これでネクストリクエストの基本は完了です。
  89. 7:09お疲れさまでした。
  90. 7:10次回は、ゲットとポストを一つのファイルにまとめるルートハンドラーを学びます。
日本語字幕をダウンロード(WebVTT)

この動画で学べること

NextRequestはWeb標準のRequestを拡張するAPIです。nextUrlで検索条件を読み、CookieとJSON本文の扱い、入力検証の境界を学びます。

解説記事・サンプルコードを読む:NextRequestの使い方:URL・Cookie・本文から入力を取り出す →