Carpe Diem

備忘録

Node.js

Node.jsでGraceful Shutdown

概要 christina04.hatenablog.com のNode.js版です。 環境 Node.js v18.18.0 TypeScript v5.2.2 Express v4.18.2 課題 次のようなアプリケーションコードがあった際に import type { Express, Request, Response } from "express"; import express from "exp…

npm install する時のnpmのバージョンを固定する方法

概要 npmのバージョンを上げた(v6.x.x)ところ、以下のissueと同じケースに当たってCircleCIのキャッシュが効かない問題が起きました。 github.com 具体的には 開発ではMacを使用している 開発用MacとCircleCIのNode.js、npmバージョンは同一である CircleCI…

混ぜるな危険 〜同期関数と非同期関数〜

概要 Node.jsといえば非同期やcallbackで有名ですが、1つの関数の中で非同期な処理と同期的な処理が混ざってしまうと期待しない挙動になることがあるので注意しましょう、という話です。 環境 Node.js 8.9.0 基本的な方針 非同期な関数は全て非同期処理でま…

Event LoopとMicrotasksについて

概要 以前 christina04.hatenablog.com でMacrotasksとMicrotasksについて触れました。 ただこの時使ったのがPromise、setTmeout()だけで、他の種類の非同期関数を使った場合どうなるのだろう、と気になり検証してみました。 環境 Node.js v8.9.0

Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別

概要 各言語がC10K問題をどう解決してきたかを調べてみたところ、Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別がよく分からなかったので調べてみました。 正直なところ人によってちょこちょこ定義が異なるのではっきりとした答えはなさそう…

Tasks(Macrotasks), Microtasksについて

概要 Angularで出てきたfakeAsyncやwhenStableを使う時に、microtasksの話が出たのでちゃんと理解しようと調べてみました。 実験 以下のjsのログ順はどうなるでしょうか? console.log('script start'); setTimeout(function() { console.log('setTimeout');…

Expressでroutingの後にmiddlewareを置きたい

概要 あるサーバ用のライブラリを使ったときにrouting後にmiddlewareを挟む必要が出てきました。 そのときに幾つかハマったことがあったので、それをまとめます。 環境 Node.js 6.6.0 Express 4.13.4 Express4のミドルウェアの流れ まずはミドルウェアの実行…

Node.jsでcluster環境でのlogging

概要 cluster環境では複数のプロセスが並列に動きます。 この状態で1つのログファイルにアクセスすると干渉が起きます。 かと言って各プロセス毎にログファイルを作成してしまうのは集約が面倒です。 今回はlog4jsを使ってその問題を解決します。 環境 Node…

Node.jsでFacebookのOAuth2.0を用いた認証

概要 FacebookのOAuth2.0を利用した認証を使うことがあったのでまとめました。 Node.jsなのでpassportというライブラリを使用します。 環境 Node.js 5.0.0 Express 4.13.1 npm 3.4.0 事前準備 以下のFacebookページでOAuth用のアプリを用意してください。 Fa…

Node.jsでOpenID Connect認証

概要 前回はOpenIDで認証を行いました。 ですが実はGoogleのOpenIDでの認証は2015/04までに廃止の予定らしいのでOpenIDConnectへの移行を勧めてるらしいです。 なので今回はOpenIDConnectでの認証を実装します。 環境 Node.js 0.10.22 Express 4.0 passport …

Node.jsでOpenID認証

概要 OpenIDを用いてログイン認証(の一部)を実装します。 一部と言うのはDB含めたユーザデータの保持までは範囲外としてるためです。 またOAuthとの区別が付いていない人は、以下のリンクを参考にしてください。 非技術者のためのOAuth認証(?)とOpenIDの違…