NodeのExpressのルーティングを理解してgetやpostなどのHTTPリクエストに対応する 結城永人 -2024年6月4日 FirebaseのFunctionsでNodeのExpressを初めて使って目眩を起こすような感しがした、getやpostなどのHTTPリクエストに対してルーティングという処理を行う。これが変数と関数とメソッドとエンドポイントなどの色んな要素で入り組んで頭の中がグチャグチャになると倒れるくらい難しい。分かれば何ということもないし、Expressの便利な機能なので、良く覚えておきたい。 Expressのルーティングとは何か ある関数の実行をサイトアドレスで振り分ける処理がルーティングで、Expressは受け取るHTTPリクエストのメソッドを含めて最初から分散させることができる。 ルーティング とは、アプリケーションが特定のエンドポイントに対するクライアント要求に応答する方法として、URI (またはパス) と特定の HTTP 要求メソッド (GET、POST など) を決定することです。 基本的なルーティング|Express|StrongLoopとその他のexpressjs.comコントリビューター ExpressはHTTPリクエストがどこにどのように来たかで、関数の実行を制御すること、またはアプリケーションのエンドポイントとして機能させることがルーティング処理で可能になる。 Expressのルーティングのプログラム Expressのルーティングのプログラムは四つの項目で構成される。 ルーティングのプログラムの基本的な構成 app.METHOD(PATH, HANDLER) 四つの帯文字の部分がExpressのルーティングのプログラムの四つの項目に対応している。 app(アップ)使用するExpressのインスタンスMETHOD(メソッド)受け取るHTTPリクエストの種類PATH(パス)サーバーの送受信のサイトアドレスHANDLER(ハンドラ)HTTPリクエストのコールバック関数 実際のソースコードでは任意の値で使われることになる。 getメソッドをルートディレクトリで対応するサンプル const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('response to getrequest'); }); 一行目のrequire()メソッドでExpressのモジュールを入れて二行目のexpress()メソッドでインタンスを生成した。 四行目から六行目がルーティング処理のプログラムになる。 四行目の「app」が使用するExpressのインスタンスで、サンプルではconstで定数として宣言された二行目のappに相当する。 その次の「get」が受け取るHTTPリクエストの種類で、getメソッドで送られたものに対して動作するという指定になる。 その次の「/」がサーバーの送受信のサイトアドレスで、サンプルでは半角スラッシュだけだからルートディレクトリで対応する。 その次の(req, res) => { res.send('response to get request') }がHTTPリクエストのコールバック関数で、内容としては「response to get request'」(getリクエストへ返す)という文字列をresオブジェクトのsend()メソッドで送る。 Expressのルーティングのハンドラはreqとres(受け取りと送り返し)という二つのオブジェクトによってデータの送受信を行うことになる。 postメソッドをルートディレクトリで対応するサンプル const express = require('express'); const app = express(); app.post('/', (req, res) => { res.send('response to getrequest'); }); ルーティングのプログラムのメソッドの部分を「post」にするとpostメソッドによるHTTPリクエストに対応する。 getメソッドをapiディレクトリで対応するサンプル const express = require('express'); const app = express(); app.get('/api', (req, res) => { res.send('response to getrequest'); }); ルーティングのプログラムのパスの部分を「/api」にするとapiディレクトリのサイトアドレスでHTTPリクエストに対応する。 メソッドの種類やパスの指定は他にも、色々、あってExpress でのルーティングに紹介されている。 Expressのルーティングのデータ HTTPリクエストのデータの送受信はルーティングのプログラムのハンドラ、すなわち呼び出しへのコールバック関数で行う。 HTTPリクエストで送られたデータの受け取り ExpressでのHTTPリクエストのデータの受け取りはルーティングのハンドラの「req」オブジェクトから各種メソッドで可能だけれども前提条件としてbody-parserモジュールがなくてはならない。 body-parser body-parserモジュールはExpressのバージョン14.6.0か14.7.0以降に標準搭載されていてインストールする必要はなく、expressアプリからメソッドで使用できる。 express.json([options])JSONへ解析して受け取る。14.6.0以降。express.urlencoded([options])URLエンコードへ解析して受け取る。14.6.0以降。express.raw([options])Bufferへ解析して受け取る。14.7.0以降。express.text([options])文字列へ解析して受け取る。14.7.0以降。 出典:Express 4.x JSONの受け取りのサンプル 例えばJavaScriptのfetch()メソッドのpostメソッドでルートディレクトリに送られた{"data":"テスト"}というJSONデータ(application/json)を受け取るような場合。 const express = require('express'); const app = express(); app.use(express.json()); app.post('/, (req, res) => { console.log(req.body); // {"data":"テスト"} console.log(req.body.data); // テスト res.send("Receipt completed"); }); URLエンコードの受け取りのサンプル 例えばHTMLのform要素のpostメソッドでapiディレクトリに送られた("data":"テスト")というURLエンコードデータ(application/x-www-form-urlencoded)を受け取るような場合。 const express = require('express'); const app = express(); app.use(express.urlencoded({extended:true})); app.post('/api, (req, res) => { console.log(req.body) // {"data":"テスト"} console.log(req.body.data) // テスト res.send("Receipt completed"); }); Expressはbody-parserモジュールを使わないとデータの受け取りができず、postメソッドで送られたreqオブジェクトを開くと空になるという不可思議な現象が起きる。 HTTPリクエストへのデータの送り返し ExpressでのHTTP リクエストへのデータの送り返しはルーティングのハンドラの「res」オブジェクトから各種メソッドで可能になっている。 res.download()ファイルのダウンロードのプロンプトを出す。res.end()ハンドラを終了する。res.json()JSONデータを送信する。res.jsonp()JSONPをサポートするJSONデータを送信する。res.redirect()リダイレクトする。res.render()テンプレートをレンダリングする。res.send()様々なデータを送信する。res.sendFileファイルをオクテットストリーム(任意のバイナリ形式)で送信する。res.sendStatus()レスポンスのステータスコードを設定してその文字列を本文として送信する。 出典:Expressでのルーティング jsonメソッドの送り返しのサンプル 例えばgetメソッドでHTTPリクエストがあってルートディレクトリに{data:"テスト"}というJSONデータを送り返すような場合。 const express = require('express'); const app = express(); app.get('/', (req, res) => { res.json({data:"テスト"}) }); sendメソッドの送り返しのサンプル 例えばgetメソッドでHTTPリクエストがあってapiディレクトリにHTMLで「テスト」を表示するような場合。 const express = require('express'); const app = express(); app.get('/api', (req, res) => { res.send("<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta content='width=device-width, initial-scale=1' name='viewport'/> <title>テスト</title> </head> <body> <p>テスト</p> </body> </html>"); }); ExpressのルーティングはHTTPリクエストをどこでどのように受け取って対応するかを決めるものだけど、とにかくプログラムの書き方が分からないと取り分けメソッドとパスを巡って非常に混乱せざるを得ない。 app.METHOD(PATH, HANDLER) もう一度、確認しておくとメソッドの部分は受け取りのメソッドだけを意味して送り出しに関してはハンドラの部分で指定される。そしてパスの部分は受け取りと送り出しの両方のパスを意味していている。 ルーティングのプログラムのメソッドとパスがHTTPリクエストの送り出しに関わるものを固有に含むと捉えると受け取りと考え合わせてどっちがどっちなのかと訳が分からなくなるから注意したい。 コメント 新しい投稿 前の投稿
エドガー・アラン・ポーの黒猫の原文と注解 アメリカの英語の小説、 エドガー・アラン・ポーの 黒猫 を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC730点くらいを越える...
ナサニエル・ホーソーンの若いグッドマン・ブラウンの原文と注解 アメリカの英語の小説、 ナサニエル・ホーソーンの 若いグッドマン・ブラウン を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC7...
ナサニエル・ホーソーンの若いグッドマン・ブラウンの日本語訳 十九世紀のアメリカの作家、小説家の ナサニエル・ホーソーン の小説の 若いグッドマン・ブラウン (1835)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる。 ...
三浦春馬のたぶん本当の死因 三浦春馬は自殺した。その後、 芦名星と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではないと...
アドセンスの個人のアメリカの税務情報/W-8BEN納税フォームの書き方 アドセンスに利用者の税務情報が必要となり、2021年6月1日以降、YouTubeのサイト広告などで収益を得る場合には税務情報を提出しないとアドセンスの支払いからアメリカの源泉所得税が米国内国歳入法の第三章により、控除される。 Google は、YouTube パートナー プロ...
芦名星のたぶん本当の死因 芦名星は自殺した。その前後、 三浦春馬と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではない...
苫米地英人のマインドフルネスに役立つ機能音源 認知科学者の 苫米地英人のコーチング を自己流で始めてさらに良いかも知れないと新しく始めたのが機能音源なんだ。聴くと周波数などの仕組みで脳に影響を与えて様々な効果を発揮するために作られているといわれる。調べるとCDの数十枚のセットで何万円もするので、驚かされるけれども教材として売...
ヘンリー・ローソンの家畜追いの妻の日本語訳 十九から二十世紀のオーストラリアの作家、詩人で小説家の ヘンリー・ローソン の小説の 家畜追いの妻 (1892)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる...
ヘンリー・ローソンの家畜追いの妻の原文と注解 オーストラリアの英語の小説、 ヘンリー・ローソンの 家畜追いの妻 を日本語に翻訳 しながら分からない単語や熟語を調べたので、英語の学習用に原文に沿って段落毎に掲載する。 取り上げる言葉の語彙力としてはおよそ日本の高校を卒業した水準以上、すなわち英検二級かTOEIC730点...
佐藤義則のヨシボールの握り方や投げ方 佐藤義則の基本情報 佐藤義則/阪急ブレーブス| フジテレビ 1954年9月11日生まれ、北海道奥尻郡奥尻町出身、函館有斗高等学校を進学して1977年に日本大学からドラフト一位で阪急ブレーブス(1989年からオリックスブレーブス、1991年からオリックスブルーウェーブ)に入...
コメント