ParseのCloud Codeでsaveとかしたい!
簡単お手軽にアプリのサーバサイドを担当してくれるParse.com。単に保存するだけならアプリから適当にデータを投げるだけなのですが、「いいね!の数をカウントアップする」みたいな、クライアント側でがんばるよりもサーバでうまいことやってもらった方が良い処理もあったりします。
そんなことを可能にするのがCloudCodeらしい・・・。
ということで、自分なりに調べてみた結果をメモ。
参考にしたのは、こちらの公式ページです。
toolのインストール
大好きなGUIはなく、基本的にコマンドラインでカタカタやるしかないようです。
まずはターミナルを起動して次のコマンドを使ってtool一式をインストール。
Macの場合
curl -s https://www.parse.com/downloads/cloud_code/installer.sh | sudo /bin/bash
このときPasswordを聞かれますが、これはマシンにインストールしようとしてるので管理者のパスワードですね。 Installing....とか出たあと終わります。
セットアップ
引き続き、次のように打ち込む。「MyCloudCode」というのはParse.comで設定しているAppに対応したCloudCodeの作業をするディレクトリの名前として使われます。なので、もしAppを登録していなければ先にParse.comのサイトで作っておいた方が良いです。
$ parse new MyCloudCode
ユーザーのディレクトリの中に、このMyCloudCodeというディレクトリが作られます。(中に3つのディレクトリ&3つのファイルも)
ディレクトリなどを作り終わったら、EmailとPasswordを聞かれます。これはParse.comのを入れます。ログインできたら、自分が登録しているアプリの一覧が表示されます。今回のCloudCodeに紐づけたいアプリを選択すると終了です。
ごっそり作られたディレクトリとファイルですが、configは触らなくてOK。publicは静的コンテンツをアップする場所らしく、実際にコードを書くのはcloud以下にあるmain.jsだそうです。なお、文字コードはUTF-8がよさげ。
実行タイミングについて
いくつかイベントが設定されてるぽい。どのタイミングで実行させるかによって、書き方が異なります。それぞれの名前は、アプリから叩くときの名前として使われます。
そのコードを叩かれた時に実行
いわゆる普通のやつ。
Parse.Cloud.define(“名前”, function(request, response){
}
Parseのデータが変更された時に実行
アプリからParseのデータを操作すると、それを感知して実行されるらしい。
セーブ前に呼び出される
Parse.Cloud.beforeSave(“名前”, function(request, response){
}
セーブ後に呼び出される
Parse.Cloud.afterSave(“名前”, function(request){
}
削除前に呼び出される
Parse.Cloud.beforeDelete(“名前”, function(request, response){
}
削除後に呼び出される
Parse.Cloud.afterDelete(“名前”, function(request){
}
バックグラウンドで実行
時間がかかる処理など。
Parse.Cloud.job("名前", function(request, status){
}
書き方
結局はParseをJavaScriptで読み書きするのでここの文法に沿って書けば良いのだけど、自分がよく使う内容だけ抜粋。memberというClass(いわゆるテーブル)にname、ageというCol(いわゆるフィールド)がある体。
Classesの指定
var query = new Parse.Query("member");
リクエストについた引数の取得
アプリから投げるときにnameという名前でTaroとか送ってきたというイメージ。変数にはTaroがはいります。
var targetName = request.params.name;
クエリーに抽出条件を設定
たとえばこんな感じで。
query.equalTo("name",targetName);
query.greaterThan("age",18);
抽出
成功失敗それぞれの処理を書いておく。抽出できたとき、結果はfunctionの( )の中に書いた変数へ納められる。複数あるときはそれが配列になっていて、result[i]とかで取り出せる。
query.find(
success: function(results){
// 成功時の処理 resultsに結果が入っている
},
error: function(error){
// 失敗時の処理 error.codeでエラーコードが拾える
}
);
値の取得、書き換え
上の例のresultsが配列で、それの1つめを操作する場合。
取り出す
var tmpName = results[0].get("name");
書き換える
results[0].set("name","Jiro");
インクリメント
results[0].increment("age");
値の保存
これも成功と失敗の処理を用意しておく。
results[0].save({
success: function(){
// 成功時の処理
},
error: function(error){
// 失敗時の処理
}
});
レスポンスを返す
ここでは文字列を固定で返してますが、もちろん計算結果や抽出結果など返してOK。
成功時
response.success("成功!");
失敗時
response.error("失敗・・・");
スクリプトのアップロード
これまたコマンドです。
$ parse deploy
実行
とりあえずターミナルから確認するにはこんな感じ。URLは「実行するタイミング」のところで書いた名前を記述。
curl -X POST \
-H "X-Parse-Application-Id: {Application ID}" \
-H "X-Parse-REST-API-Key: {REST API Key}" \
-H "Content-Type: application/json" \
-d '{}' \
{ }の中身はそれぞれみんな違っていて、簡単に参照するには
にアクセスして、値を参照するのが手っ取り早げ。
「ParseをJavaScriptで操作するようにかけばいいんだった!」と気がつくのに、少々時間がかかりました・・・。
次はテストに挑戦したい。