初書:2020/12/27
前書き
GlitchからGoogle App Script(GAS)にPOST通信をしたかったので、その時のメモ。
ちなみに、今回はGlitchを使用しているのでGlitchと書いているが、内部はnode.jsなので、実質node.jsとGASのpost通信と言っても過言ではない(ハズ)
glitch側
内部がnode.jsのため、普通のXMLHttpRequestやajaxは使用できない1
そのため、今回はaxiosというのを使用してみる
ちなみにgoogle検索をかけると、requestというのもあるが、どうやら既に非推奨らしい。
インストール
glitchではpackage.jsonに書き足すだけでいいので、単純にpackage.jsonの"dependencies"の欄に"axios": "^0.21.0"
を書く。
post通信
では実際に通信していく。今回はjsonを使用してデータのやり取りを行うことにする。
constaxiosBase=require("axios");// どこかに書いておく。consturl="/macros/s/xxxxx/exec";// gasのドメイン以降のurlconstdata={"key":"value"};// 送信するデータconstaxios=axiosBase.create({baseURL:"https://script.google.com",// gas以外の場合はそれぞれ書き換えheaders:{"Content-Type":"application/json","X-Requested-With":"XMLHttpRequest",},responseType:"json",});axios.post(url,data).then(asyncfunction(response){constresponsedata=response.data;// 受け取ったデータ一覧(object)}).catch(function(error){console.log("ERROR!! occurred in Backend.");console.log(error);});
簡単な説明
urlのところはgasから取得できるurlを入れる。
dataは送信するpostデータを入れる。ちなみにconst設定しているが、後に追加するならletとかの方がいいかもしれない
axios.post(url, data)で送信し、thenで受け取る。エラーがあればcatchへ行く。
受け取ったデータはresponseに入るので、ここで自分の好きなようにデータを扱う。
GAS側
GAS側はdoPostで受け取るだけなのだが、通常のe.parameter
では取得できないため、e.postData.contents
を使用する。
functiondoPost(e){letparameter={};// post値を受け取った時try{parameter=JSON.parse(e.postData.contents);}catch(e){// エラー処理}// 通常処理constobj={};returnContentService.createTextOutput(JSON.stringify(obj));}
parameter
に受け取ったpost値が入っているので、これを使用して処理する。
そして最後にobj
をjsonにして返す。
終わりに
一度書ければあとは使いまわせる簡単なものなので、とりあえずこれを使おうかなと思う。
ちなみにglitch及びGASは両方触りたてなので、もしおかしいところがあれば突っ込んでください。
参考サイト
[axios] axios の導入と簡単な使い方 - Qiita
厳密には専用のnpmをインストールしたら出来そうではあるが、試してない ↩