Skip to content

Instantly share code, notes, and snippets.

@unr
Last active August 11, 2018 20:02
Show Gist options
  • Save unr/64790cdf236b2d8acbcbf81634475956 to your computer and use it in GitHub Desktop.
Save unr/64790cdf236b2d8acbcbf81634475956 to your computer and use it in GitHub Desktop.
Bare minimum example of Prismic API exposed as a Nuxt.js plugin
/**
* Prismic API
* Creates a prismic api instance on the app, for use in asyncData for loading content.
*/
import Vue from 'vue';
import prismic from 'prismic-javascript';
export default ({ app, env, error }) => {
const PrismicApi = {
// use this to access singular api instance in app
// in vue: this.prismic.api
// in asyncData/fetch: app.prismic.api
api: {
// This default object, prevents failures when calling `this.prismic.api.query` before it
// has fully initialized. This will be overwritten when its ready.
// This is mostly to track which pages are causing the call to occur early, for improved debugging
query(queryPredicates) {
if (process.client) {
app.$raven.captureMessage('Prismic Called Before Creation', {
extra: {
error: 'prismic.api.query was called before prismic.getApi finished',
queryPredicates,
},
});
}
error({ statusCode: 500, message: 'Something went wrong, please refresh and try again.' });
return new Promise(resolve => resolve({ failed: true, results: [] }));
},
},
// ready is true, when we've loaded the prismic api and not our default above.
hasApi: false,
// allows us to build queries via app.prismic.Predicates
Predicates: prismic.Predicates,
// returns existing api, or makes a new one for use in app via app.prismic.api
async getApi() {
this.api = await prismic.getApi(env.prismicApi, { accessToken: env.prismicToken })
.catch((err) => {
if (process.client) {
app.$raven.captureMessage('Failed loading prismic api', { extra: { error: err } });
}
return error({ statusCode: 500, message: 'Something went wrong, please refresh and try again.' });
});
},
};
app.prismic = PrismicApi;
Vue.prototype.prismic = PrismicApi;
}
@unr
Copy link
Author

unr commented Aug 7, 2018

app.$raven is just my chosen error logger.

@unr
Copy link
Author

unr commented Aug 11, 2018

Updated, to remove the preservation of api.

Should be making a new version for each request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment