こんにちは!
最近、Node.jsの学習を初めて、様々なフレームワークやライブラリがあると知りました。フレームワークだとExpress、Next.js、Nuxt.jsあたりは耳にしたことがあるのではないでしょうか。それぞれ書き方が異なるので、Node.jsの学習を始めたばかりの人にとっては「フレームワーク使うと何が変わるん?」って疑問を持つこともあると思います。
今回はNode.jsフレームワーク「Express」をざっくり理解するために、以下の2つを比較したいと思います。
ポイント
①純正Node.js(フレームワークなし、ライブラリなし)
②Node.js × Expressフレームワーク(ライブラリなし)
前提
・どちらも「Hello World」を出力する
・どちらも1ファイルのため、記述方法の違いに限定する
①純正Node.js(フレームワークなし、ライブラリなし)の場合
//httpオブジェクトを生成
var http = require('http');
//サーバーオブジェクトの生成
var server = http.createServer(function(req,res){
//writeHeadメソッドでhttpヘッダを書き出す
res.writeHead(200,{'Content-Type':'text/plain'});
//writeメソッドでhtmlコンテンツを書き出す
res.write('Hello World');
//endメソッドでhttpコンテンツ出力を完了する
res.end();
});
//ポート番号を指定してサーバーを待ち受け状態にする
server.listen(1234);
//サーバーを起動したことを明示するため
console.log('サーバーを起動しました');
②Node.js × Expressフレームワーク(ライブラリなし)の場合
// expressオブジェクトの生成
var express = require('express');
// expressメソッドを用いて、appオブジェクトの生成
var app = express();
// appオブジェクトのgetメソッドを用いて、GETリクエストの登録
// リクエストのURIによって、処理を分けられる
app.get('/',function(req,res){
// ルートにアクセスされた場合の処理
// sendメソッドで応答を送信する
res.send('Hello World');
});
var server = app.listen(1234, function(){
console.log('サーバを起動しました');
})
順番に記述して見ましたが、いかがでしょうか??
サーバーサイド のレンダリングの記述の違い
純正node.jsではhttpオブジェクトを使用 ↔︎ Expressではappオブジェクトを使用
Expressでは以下の記述が不要
・httpヘッダ(ステータスコードやヘッダ情報)
・http書き出しの完了(res.end)
ExpressではクエストのURIによって、処理を分けられる
まとめ
当たり前ですが、フレームワークを使った方が負担はだいぶ軽くなります。
上記の例ではapp.getでGETリクエスト時のサーバーサイドのレンダリングを行いましたが、app.postでも同様のことが可能です。
説明不足もあるかと思いますが、なんとなくExpressのイメージができてもらえたら幸いです。
誤り等がありましたら、お気軽にお問い合わせください〜