prismic-nodejs
v1.5.1
Published
prismic.io middleware for express
Downloads
2,307
Readme
prismic-nodejs
Prismic.io support for NodeJS
This is a set of helpers to use Prismic.io in a NodeJS application. Currently it only contains a helper to create a preview route. If you're starting from scratch, our NodeJS SDK is a good base.
Installation
npm install prismic-nodejs --save
Usage
const prismic = require('prismic-nodejs');
const PrismicConfig = require('./prismic-configuration');
The Prismic object is extended from the Javascript Kit, so any attribute of the official kit, for example Predicates
, is also available in the object exposed by express-prismic.
It is recommended to create a middleware method that will fetch the Api object for your repository and expose data to your templates:
// This is the configuration for prismic.io
/*
* Initialize prismic context and api
*/
app.use((req, res, next) => {
Prismic.api(PrismicConfig.apiEndpoint, { accessToken: PrismicConfig.accessToken, req })
.then((api) => {
req.prismic = { api };
res.locals.ctx = {
endpoint: PrismicConfig.apiEndpoint,
linkResolver: PrismicConfig.linkResolver,
};
next();
}).catch((err) => {
const message = err.status === 404 ? 'There was a problem connecting to your API, please check your configuration file for errors.' : `Error 500: ${err.message}`;
res.status(err.status).send(message);
});
});
You can then call it in your routes if you need to query your repository:
app.route('/').get((req, res) => {
req.prismic.api.getByUID('page', 'get-started')
.then((document) => {
res.render('index-prismic', { document });
})
.catch((err) => {
// Don't forget error management
res.status(500).send(`Error 500: ${err.message}`);
});
});
Previews
You can preview any document including drafts in your production site, securely. All you have to do is include this route:
app.route('/preview').get((req, res) => (
Prismic.preview(req.prismic.api, PrismicConfig.linkResolver, req, res)
));
Then:
- Configure the URL to that preview route in the settings of your repository
- Make sure that the Prismic Toolbar is included in your views