React server side rendering support for Fastify with Next Framework.
npm i fastify-nextjs next --save
Since Next needs some time to be ready on the first launch, you must declare your routes inside the after callback, after you registered the plugin.
The plugin will expose the api next in Fastify that will handle the rendering for you.
const fastify = require('fastify')()
fastify
.register(require('fastify-nextjs'))
.after(() => {
fastify.next('/hello')
})
fastify.listen(3000, err => {
if (err) throw err
console.log('Server listening on http://localhost:3000')
})All you server rendered pages must be saved in the folder pages, as you can see in the next documentation.
// /pages/hello.js
export default () => <div>hello world</div>If you need to pass custom options to next just pass them to register as second parameter.
fastify.register(require('fastify-nextjs'), { dev: true })If you need to handle the render part yourself, just pass a callback to next:
fastify.next('/hello', (app, req, reply) => {
// your code
// `app` is the Next instance
app.render(req.raw, reply.raw, '/hello', req.query, {})
})The plugin includes under-pressure, which can be configured by providing an underPressure property to the plugin options.
Using under-pressure allows implementing a circuit breaker which returns an error when the health metrics are not respected.
Because React server side rendering is a blocking operation for the Node.js server, returning an error to the client allows signalling that the server is under too much load.
The available options are the same as those accepted by under-pressure.
For example:
fastify.register(require('fastify-nextjs'), {
underPressure: {
exposeStatusRoute: true
}
})-
underPressure-bool|object- (default) when false,
under-pressureis not registered - when true,
under-pressureis registered with default options - when it is an object,
under-pressureis registered with the provided options
- (default) when false,
This project is kindly sponsored by:
Licensed under MIT.