りゅうじの学習blog

学習したことをアウトプットしていきます。

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()の引き渡す事で組み込めます。

利用時の注意点

  • 全てのリクエストに対して処理されます。
  • コードの上から順に実行されるので記述箇所に注意する。

参考

Udemy Node.js + Express + MySQL で作る 安全な Webアプリケーション 実践