Carpe Diem

備忘録。https://github.com/jun06t

Node.js

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

概要 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用のアプリを用意してください。 Facebook Dev…

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の違…

Yeoman を使ってみる

Yeomanは簡単にいうと「今風のWebアプリのための土台/基盤を作ってくれるツール」です。PHPやRubyのscaffoldと似た感じです。 Yeomanは以下の3つのツールをまとめたものです Yo・・・ひな型生成ツール Bower・・・JavaScriptライブラリ依存管理 Grunt・・…

nodebrew で node をインストール

以前はaptパッケージからインストールしました。 しかし nvm や nodebrew を使うと複数のバージョンを簡単に扱えるので、今回は nodebrew を使ってインストールしてみます。 もし過去に node をインストールしていたらアンインストールしてください。 ◆nodeb…

簡単にWebAPIモックサーバを作る

やや中規模な開発からはWebAPIサーバをたてる実装になったりしますね。 かといってフロント側がテストしたいときにいつもサーバにアクセスする or そもそもAPIサーバも構築途中で検証しづらい状況ってあると思います。 そんな時に簡単にモックサーバがたてら…

Node で Cluster モジュールを使う

Clusterモジュールを使うと簡単にクラスタを実装できます。 導入すると何が良いの? → マルチコア環境で処理能力があがります。 というわけで実装します。どういう仕組みかは「Cluster」を参照してください。 まずは実験環境を導入します。Nodeがインストー…

Protocol Buffersを使ってみる

Google Protocol Buffersを使ってみます。 これはJSONやXMLなどの冗長なファイルをシリアライズ(バイナリ化)することでデータの転送を速くするためのものです。 ・プログラミング言語に依存しない ・コンパクトなバイナリ形式を採用 ・データアクセスコー…

Node.js で session を使う

今回はNodeでのセッション管理機能の使い方です。 Expressフレームワークを使用する前提です。 まず最初にデフォルトのMemoryStoreセッションストアを使用します。しかしこれはメモリリークなどの不具合があるため、後半ではMongoDBやMemcachedなどのセッシ…

Node.jsでのMySQLとのアクセス

NodeでのMySQLの接続方法を説明します。 Nodeがインストールされていることが前提です。またMySQLの設定は ユーザ:root PASS:admin DB:testdb table:testtable field:uid, name, password とします。