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)
})