majidaiとは
majidaiとは、nodejs用のWebフレームワークです。
サードパーティーライブラリが使っていないため非常に軽いです。
データ量 < 50KB
インストール
nodejsがインストールはこの記事のスコープ外とします。
1. プロジェクトの初期化
タミナルから作業フォルダーに移動し、プロジェクトの初期化を行います。
npm init -y
2. majidaiインストール
以下のコマンドで「majidai」をインストールします。
npm install majidai
3. サーバーコード
以下のコマンドで「majidai」をインストールします。
// majidaiの読み込みconstmajidai=require("majidai");// インスタンス化constserver=newmajidai();// 受付開始server.start();
4. serverの起動
以下のコマンドでウエブサーバーの起動します。
node server.js
そして、ブラウザを起動し、http://localhostにアクセスします。以下の画面が表示されればOKです。
デフォルトでは80ポートで受け付けしますが、以下のようにポートを指定する事が可能です。
constconfig={http:{port:8000}};constserver=newmajidai(config);
静的コンテンツの配信
デフォルトでは静的コンテンツの配信が無効にしてますが、以下のように「Document Root」指定する事で指定のフォルダーは以下のものを配信する事が可能です。
constconfig={http:{documentRoot:'./public'}};constserver=newmajidai(config);
使い方
majidaiの書き方は以下のようになります。
server.METHOD(PATH,CALLBACK)
METHODとは
以下の3種類があります。
- get : http GETリクエストのみ受け付けます
- post : http POSTリクエストのみ受け付けま
- listen :複数のhttpメソッドを一つのPATHで受け付けます
※詳細についてはこちら
PATHとは
"/" , "/top", "/user/dakc",..みたいにどこでリクエストを受け付けるかの事です。
CALLBACKとは
これはコールバック関数の事です。指定のPATHにリクエストを受け付けたら、この関数が実行されます。関数の引数が以下の2つです。
- request : <http.IncomingMessage>
- response : <http.ServerResponse>
majidaiが両方のオブジェクトに「mj」オブジェクトを追加します。
request.mj
requestに追加したmjオブジェクトがクライアントから送られて来たデータを操作するために以下の2つの関数(メソッド)を有します。
- getParams : GETで送られて来た情報をJSONオブジェクトとして返します。キーを引数として指定することで特定のキーに対する値のみを取得する事が可能です。
- postParams: POSTで送られて来た情報をJSONオブジェクトとして返します。キーを引数として指定することで特定のキーに対する値のみを取得する事が可能です。※x-www-form-urlencoded, application/json, form-dataどれでデータが送られて来てもJSONオブジェクトとして返します。
response.mj
クライアントにレスポンスを返すために以下のメソッドを有します。
- text : plain/textとしてレスポンス
- json : application/jsonとしてレスポンス
- static : 静的コンテンツのレスポンス
- redirect : 別のURLへリダイレクト
- error : HTTPエラーとしてレスポンス
※ 詳細についてはこちら
samples
サンプルを見ながらどのようなことできるかやってみましょう!
1. GET受付
constserver=newmajidai();server.get("/home",(request,response)=>{// リクエストがhttp://〇〇/home?price=230)varprice=request.mj.getParams("price");console.log(price);// 230// OR// 全データをJsonオブジェクトとして取得vargetData=request.mj.getParams();console.log(getData);// { price: '230' }// 「price」の値を取得varprice_=getData.price;console.log(price);// 230return"ここで返すものがクライアントへのレスポンスになります";});server.start();
2. POST受付
constserver=newmajidai();server.post("/login",(request,response)=>{// リクエストがhttp://〇〇/login// <form action="/login" method="POST">// <input name="id" type="text" value="abc">// <input name="pass" type="password" value="p@ss">// </form>// 「id」の値を取得varid=request.mj.postParams("id");console.log(id);// abc// OR// 全データをJsonオブジェクトとして取得varpostData=request.mj.postParams();console.log(postData);// { id: 'abc', pass: 'p@ass' }// 「id」の値を取得varid_=postData.id;console.log(id_);// abcreturn"ここで返すものがクライアントへのレスポンスになります";});server.start();
3. 複数HTTPメソッド受付
constserver=newmajidai();server.listen({method:["GET","POST"],path:"/profile"},(request,response)=>{// GETでもPOSTでもこのの処理を実行されます。// DO SOMETHINGreturn"something";});server.start();
Parameterized URL
どのような表現が分かりやすいかよくわからなかったため、上記の表記にしました。ごめんなさい。何か気付くところがありましたら是非コメントに残してやってください。
この機能がどうしても実現したかった機能です。
「http://〇〇/user?id=abdf&command=edit」より
「http://〇〇/user/abdf/edit」
ほうが好きだったからです。
// {}の中のものがその名前のキーでデータを取得する事ができます。server.get("/books/{year}/{price}",function(req,res){// リクエストがhttp://〇〇/books/2020/5000// {}の中のものがその名前のキーでデータを取得する事ができます。// 「year」の値を取得varyear=req.mj.getParams("year");console.log(year);// 2020// 「price」の値を取得varprice=req.mj.getParams("price");console.log(price);// 5000// GETと受けたものをレスポンスとして返すreturnreq.mj.getParams();});
※post,listenの時もParameterizedURL機能が使えます。
Docker
以下の1行のコマンドを実行する事でブラウザーからmajidaiの動作を確認できます。
docker run -it--rm-p 80:80 dakc/majidai npx /data/server.js
最後に
nodejsの標準の機能のみで動く軽量なフレームワークを欲しかったため、majidaiを開発しました。MITライセンスでリリースしておりますのでご自由にお使いください。
DOCUMENTATION - https://dakc.github.io/majidai.html