parse sdk js

getting started with parse

by toidibandao

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/parse/2.1.0/parse.min.js"></script>
<div>
  ===========
</div>
<div>
  <div style="display: inline-block">
    Query all result:
  </div>
  <div style="display: inline-block" id="game-name">
    Name will be replaced here. By using Parse QueryBuilder
  </div>

</div>

<div>
  <div style="display: inline-block">
    Query with condition result:
  </div>
  <div style="display: inline-block" id="game-name-search-result">
    Result search will be replaced here. By using Parse QueryBuilder
  </div>

</div>

JavaScript

/* initialize */
Parse.initialize("cTi0VB3qzVizbwIBCuUiJNHZR4YtFMiuePtYmE4P", "jwas5Ha1bGVlZtyy6VIbjhGI7l5UJ42QmaUdx589");
Parse.serverURL = 'https://parseapi.back4app.com'


/* builder for query */
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply


const QueryBuilder = function(parseQuery) {
  /* private attribute */
  const _parseQuery = parseQuery;
  const _parseHandler = {
    get: (target, name, receiver) => {
      if (_parseQuery) {
        if (typeof _parseQuery[name] === 'function') {
          return (...params) => {
            try {
              return _parseQuery[name](...params)
                .then((data) => data)
                .catch(err => {
                  if (err.code === Parse.Error.INVALID_SESSION_TOKEN) {
                    Parse.User.logOut();
                  }
                  throw err
                })
            } catch (err) {
              return _parseQuery[name](...params)
            }
          };
        }
        return _parseQuery[name]
      }
    }
  };
  /* assign parse handler */
  const ParseProxy = new Proxy({}, _parseHandler);

  /* return Proxy object */

  return ParseProxy

}





/* demo a query set */
const gameQuery = new Parse.Query("GameScore")

// original use will be like
gameQuery.find().then(data => {
  console.log(data)
})

// get a builder based on a query
const parseQueryBuilt = QueryBuilder(gameQuery)

/* execute */

// find all
parseQueryBuilt.find().then(data => {
  setTimeout(function() {
    document.getElementById("game-name").innerHTML = data[0].attributes.name
  }, 2000)
})

// undefined result
console.log(parseQueryBuilt.fuck)

// an injected function
console.log(parseQueryBuilt.equalTo)


// query condition and add to dom
parseQueryBuilt.equalTo("name", "Jackkie Chan")
parseQueryBuilt.find().then(data => {
  setTimeout(function() {
    document.getElementById("game-name-search-result").innerHTML = data[0].attributes.name
  }, 2000)
})