実運用でNodeJSをやるなら
入れておきたいnpmパッケージ
○開発モード
コード修正時に即再起動
・nodemon
○デバッガ
実行時ブレークポイント、変数ウォッチ機能
・node-inspector
対象サーバのリモートデバッグをするには次のように行う
サーバ側でnode-inspector起動
$node --debug app.js
$node-inspector
クライアント側からはsshポートフォワードを行う
$ssh -N -L 8080:127.0.0.1:8080 (User Name)@(server IP)
クライアント側のブラウザで下記にアクセス
http://127.0.0.1:8080/debug?port=5858
○リモートエディタ
・brackets
Bracketsサーバを立ち上げ
$ brackets --proj-dir (nodeJSサーバのディレクトリ) --supp-dir (Bracketsの設定ファイルを置く任意ディレクトリ)
(server IP):6800にアクセスすると
ブラウザでBracketsエディタを起動し直接サーバファイル(コード)を編集できる
○ブラウザテスト駆動開発
・browser-sync
○非同期処理
nodejsで起こりがちなコールバック地獄を避ける。綺麗なコードがかける
エラー処理も見やすくなる
・async
・Q
Node12以降ではライブラリを使わなくてもES6のPromiseが使えるのであえて入れる必要はないかもしれない
○クリティカルセクション
同時アクセスされたら困るような箇所(同じファイル書き込みなど)をロックする
・semaphore
RDBMSのトランザクションは
sequelizeを使ったほうが良い
○永続化
マルチプロセス起動もできる
・pm2
○フレームワーク
ルーティング管理、静的リソースの管理など
・express
○ログ
アクセスログ
expressの場合、下記設定
app.use(express.logger('dev'));
実行行ログ出力
・lwl
○セッション管理
・cookie-parser
・express-session
app.use(express.cookieParser()); // cookie
app.use(express.session({
secret: 'secret cat',
cookie: { httpOnly: true,secure: true,maxAge:3600000 }, // add httpOnly and secure attr to be more safety
resave: false,
saveUninitialized: true,
rolling: true
}));
複数NodeJSサーバの場合、軽量KVSに保存するのが一般的
下記はRedisで管理する場合
・connect-redis
○クッキー
expressの場合、下記設定を有効にする
app.use(express.cookieParser());
セキュリティのために下記もすべし
-secure属性をつける
-httponly属性をつける
○HTMLテンプレートエンジン
nodejsのパラメータを渡して動的ページ生成
・ect
pug(旧jade)、ejsなどもあるがectが最速
○CSSテンプレートエンジン
cssパターンを関数化できる。
プレフィックス付なども1つの関数にまとめられる
・less
○タスク処理/ファイル変更監視
・gulp
○ページ高速化
JS,LESSをミニファイ
・gulp-uglify
・gulp-less
・gulp-autoprefixer
gzip圧縮
expressの場合は下記設定でレスポンスがgzipになる
app.use(express.compress());
○クライアントサイドライブラリ管理
・bower
・browserify
○レスポンシブデザイン
・bootstrap
○品質管理
・grunt-plato
○テスト
単体テスト
・jasmine
REST APIテスト
・frisby
○セキュリティ
盗聴対策、ログインページやフォーム入力ページがある構成ならHTTPS必須
・https
CSRF対策
・csurf
簡易にCSRF対策する場合はリファラーチェック
req.headers['referer']
XSS対策
データ検証(validate)と、無害化(sanitize)
・validator
クライアントサイドでsanitizeしないと確実でない
下記はDBや認証使う場合
○MySQL
・node-mysql
MySQLのORM
・sequelize
下記npmでさらにマイグレーション(古いDB定義を新しいDB定義に変換する)もできる
・sequelize-cli
○Redis
・node-redis
○OAuth認証
・passport
○LDAP
・ldapjs
おまけ
○サーバサイドレンダリング
・node-canvas
canvas描画をcairoエンジンによりサーバ側で行う
・reactjs
下記サンプル参照
https://github.com/mhart/react-server-example
DOM描画に関するブラウザ依存がなくなるかも
XSS対策がサーバ側でできる
(実用に耐えられるかは要検証)