ITエンジニアの雑談@rascalroom

インフラからフロントまで。若輩エンジニアの勉強まとめ。

アプリ製作 #Sails.js &コントローラー %req.body (POST)

 

 

コントローラーについてのメモ程度に。

 

雑談

RequestResponse を書くときに、

「あれ?なんだったけ?」って、

よくホームページに駆け出しているのですが、

 

英語をニュアンスでしか処理できない低知能のこの頭は、

毎回、四苦八苦しながら読むことになっております。

 

「いや、ノートとかまとめろよ。」みたいなのは無視して。

 

 

と、いうことで、

Request(req)と Response(res)について書き残しましょう。

 

長くなりそうなので、小分けにします。

 

 

req.body

説明

パースされたリクエストボディからのテキストパラメータを含むオブジェクト

って書いてありますね。

 

 パースとは?

と思った時のために頑張って書きます。

「もうわかったわ!」ってときは読み飛ばしましょう。

 

JSON を表すときは、

{"name":"rascal", "group":"RascalRoom"}

こんな感じにすることが多いんじゃなかろうか。

Key と Value に " " が付いてますね。

 

「この表現どっかでみたかな。。。」

「そう、JavaScript のオブジェクトだ!」

 

「じゃあ、このオブジェクトが変数 User に格納されているとして、

console.log(User.name);

とかすれば、

rascal

って出力されるのでは。」

ところが、

undefined

そううまくいきませんね。

 

オブジェクトと JSON は別物と考えましょう。

 

似た表現ですが、別物です。

JSON はただの文字列です。

 

しかし、両者を変換する方法があります。

それが、「エンコード」と「デコード」です。

 

JSON に変換することを「エンコード」、

JSON からプログラムで使える形にするのが「デコード」です。

 

JavaScript のオブジェクトにデコードするときは、

JSON.parse()

 メソッドを使います。

 

var UserParse = JSON.parse(User);
console.log(UserParse.name);
rascal

無事に出力されました。

 

"パース" はつまりこういうこと。

JavaScript では JSON をオブジェクトとして使えるようにした状態のことかな。

と、認識してます。

 

調べてみても、

コンピュータプログラムの機能・処理の一つで、一定の書式や文法に従って記述されたデータを解析し、プログラムで扱えるようなデータ構造の集合体に変換することをパースという。

 こう書かれているので、そういうことですね。

 

 

使い方

例えばコントローラーに

/**
 * RoomController
 *
 * @description :: Server-side actions for handling incoming requests.
 * @help        :: See https://sailsjs.com/docs/concepts/actions
 */

module.exports = {
  

  /**
   * `RoomController.rascal()`
   */
  rascal: async function (req, res) {

    console.log(req.body);

    return res.ok();
  }

};

と書いたとします。

rascal アクションは、/rascal にルーティングしたとすると、

 

下記コマンドでアクセスすれば、

root@RascalRoom:~# curl -X POST -H "Content-Type: application/json" -d '{"Name":"rascal", "Group":"RascalRoom"}' { FQDN or IPアドレス}:{Port}/rascal

 

 info: Starting app...

 info: ・? Auto-migrating...  (alter)
 info:    Hold tight, this could take a moment.
 info:  ? Auto-migration complete.

 info: 
 info:                .-..-.
 info: 
 info:    Sails              <|    .-..-.
 info:    v1.2.3              |\
 info:                       /|.\
 info:                      / || \
 info:                    ,'  |'  \
 info:                 .-'.-==|/_--'
 info:                 `--'-------' 
 info:    __---___--___---___--___---___--___
 info:  ____---___--___---___--___---___--___-__
 info: 
 info: Server lifted in `/app/app1`
 info: To shut down Sails, press  + C at any time.
 info: Read more at https://sailsjs.com/support.

debug: -------------------------------------------------------
debug: :: Sat Jul 06 2019 15:12:34 GMT+0000 (Coordinated Universal Time)

debug: Environment : development
debug: Port        : 1337
debug: -------------------------------------------------------
{ Name: 'rascal', Group: 'RascalRoom' }

ちゃんと POST したデータと受け取ってますね。

 

curl コマンドで JSON を渡しましたが、

req.body はパースされた状態で受け取ってます。

 

 

まとめ

req.body は JSONをPOSTされたときに、

パースした状態で受け取ることができる。

 

(JSONだけじゃないのかも。。。)

 

 POST で受け取るデータは、

リクエストボディに格納される。

だから、req.body