コントローラーについてのメモ程度に。
雑談
Request と Response を書くときに、
「あれ?なんだったけ?」って、
よくホームページに駆け出しているのですが、
英語をニュアンスでしか処理できない低知能のこの頭は、
毎回、四苦八苦しながら読むことになっております。
「いや、ノートとかまとめろよ。」みたいなのは無視して。
と、いうことで、
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 か