今回はJavaScript SDK Version 2を利用する際に必要になるであろうTipsを幾つか紹介します。なおドキュメントはこちらに用意してありますので不明点があればぜひ参考にしてください。
今回は以下の5つです。
- データストアの基本的な使い方
- データストアに権限をつけて保存する
- データストアで検索を行う
- データストアでOR検索する
- 新規登録/認証/ログアウトについて
データストアの基本的な使い方
Version 1におけるデータストアは NCMB.Object.extendというメソッドを使っていました。Version 2からは NCMB.DataStoreのサブクラスになります。
var ncmb = new NCMB(apikey, clientkey); // NCMB.Objectのサブクラスを生成 var GameScore = ncmb.DataStore("GameScore");
そしてGameScoreというクラスのインスタンスを作ることで、各レコードになるデータを生成します。
var game_score = new GameScore();
後はsetメソッドを使ってデータをセットし、saveメソッドでデータの保存を行います。その結果、保存がうまくいけば then、失敗すればcatchに返ってきます。
game_score.set("name", "Test user"); game_score.set("score", 80); game_score.save() .then(function(obj) { // データの保存成功 }) .catch(function(err) { // 保存失敗 });
なお、このPromiseの処理ではsetメソッドをつなげて書いていくこともできます。メソッドチェーンを使った書き方にするとJavaScriptらしくなります。
game_score.set("name", "Test user") .set("score", 80) .save() .then(function(obj) { // データの保存成功 }) .catch(function(err) { // 保存失敗 });
データストアに権限をつけて保存する
Version 2ではこれまであったsetACLメソッドがなくなりました。その代わりに権限をつける場合は acl というカラムに NCMB.Acl() をつけて保存します。
var acl = new ncmb.Acl(); acl.setUserWriteAccess(user, true) // 特定のユーザに書き込み権限追加 .setPublicReadAccess(true); // 全体の読み込み権限追加 var Note = ncmb.DataStore("Note"); var note = new Note(); note.set("content", "Memo"); // aclを設定 .set("acl", acl) .save();
データストアで検索を行う
これではNCMB.Queryを使っていましたが、Version 2からはデータストアのサブクラスをそのまま使えるようになりました。
var Note = ncmb.DataStore("Note"); Note.limit(5) .equalTo("content", "Memo") .fetchAll() // 検索成功 .then(function(ary) { }) // 検索失敗 .catch(function(err) { });
検索結果は配列で返ってきます。使える検索条件はSDKガイド (JavaScript) : クエリの使い方 | ニフティクラウド mobile backendを参照してください。
なお、並び替えですがデフォルトは昇順になります(1、2、3…といった順)。降順にする場合はorder(“cloumn”, true)のように2つめの引数をtrueと指定してください。
データストアでOR検索する
AND検索は検索条件をメソッドチェーンでつなげていけばOKです。
GameScore.lessThan("score", 500) .greaterThanOrEqualTo("score", 100); .fetchAll()
ORの場合は条件を作成し、orメソッドで指定します。
var GameScore = new ncmb.DataStore("GameScore"); var subquery1 = GameScore.lessThan("level", 10); var subquery2 = GameScore.greaterThanOrEqualTo("score", 500); // GameScoreクラスでscoreが500以上か、levelが10より小さいオブジェクトを検索 GameScore.or(subquery1, subquery2)
若干複雑になってしまいます。ORを多用するような設計は避けた方が良いかもしれません。
新規登録/認証/ログアウトについて
認証は NCMB.User.login を使って行います。引数はユーザIDとパスワードです。
ncmb.User.login(username, password) // 認証成功 .then(function() { }) // 認証失敗 .catch(function(err) { });
そしてログインしたユーザの情報はNCMB.User.getCurrentUser()で取得ができます。
var current_user = ncmb.User.getCurrentUser(); console.log(current_user.userName); // Test user
ユーザをログアウトする場合は、NCMB.User.logoutを使います。
ncmb.User.logout() // ログアウト成功 .then(function() { }) // ログアウト失敗 .catch(function(err) { });
ログアウト処理はmBaaS側での処理も発生しています。なのでセッションを消すだけでなく、ログアウト用のメソッドを使うようにしてください。
JavaScript SDK Version 2はまだリリースされたばかりですので、不具合や不足している機能があるかも知れません。何か気付いた点があったら、NIFTYCloud-mbaas/ncmb_jsまでフィードバックをください。またはユーザコミュニティへ投稿してもらっても結構です。