2022年3月25日 Node.js Express
ストリームインスタンス
Node.jsによって提供される多くのストリームオブジェクトがあります。
例えば、HTTPサーバーへのリクエストとprocess.stdout
はどちらもストリームインスタンスです。
pipeイベント
読み取り可能なストリームでstream.pipe()メソッドが呼び出されたときに発行され、この書き込み可能なオブジェクトを宛先のセットに追加します。
const writer = getWritableStreamSomehow(); const reader = getReadableStreamSomehow(); writer.on('pipe', (src) => { console.log('Something is piping into the writer.'); assert.equal(src, reader); }); reader.pipe(writer);
process.stdoutプロパティ
stdoutに接続されたストリームを返します。fd 1がファイルを参照している場合を除き、net Socket(デュプレックスストリーム)です。ファイルを参照している場合は、書き込み可能なストリームです。
例として、process.stdiinをprocess.stdoutにコピーするには以下のようになります。
process.stdin.pipe(process.stdout);
process.env
Node.jsにおける環境変数はprocess.envというオブジェクトに格納されます。
このオブジェクトは最初から存在しており、環境変数が入っています。
ターミナルでnodeを入力しprocess.envを入力すると中身が見れます。
expressの可能不可能
できる事
- リクエストのルーティング
- レスポンスの基本的な整形
できない事
- クッキー
- セッション
- 認証認可
- DB接続
※できない事はミドルウェアを導入して利用できるようにします。
ミドルウェアとは
リクエストレスポンスに対して任意の追加処理を行う関数です。
- ベースはexpressが処理をして足りないものをミドルウェアが補います。
できる事
等です。
ミドルウェアの実装
通常の処理
function (req, res, next) { // 処理 next(); }
- 引数は三つです。
- 次のミドルウェアに
next();
をつけて渡すようにする(しないと返ってこない処理になります)
エラー処理
function (err, req, res, next) { // 処理 next(); }
- 第一引数にエラーが含まれるので引数は4つです。
ミドルウェアの組み込み
const express require("express"); const app = express(); app.use((req, res, next) => { }); app.listen(3000);
- app.use()の引き渡す事で組み込めます。
利用時の注意点
- 全てのリクエストに対して処理されます。
- コードの上から順に実行されるので記述箇所に注意する。