createRouter(app, [options])
Creates locale aware express router with universal cookie and gzip compression enabled.
Gzip compression is only enabled on production environment
Arguments
app(Next Server)[
options] (Object):[
routes] (Object.<Object>): An object which key is a route path and value is an object with the following properties:page(String): Path to page component.[
method] (String): HTTP method, default isGET.
[
redirects] (Object.<Object>): An object which key is a redirection source path and value is an object with the following properties:to(String): Redirection target path.[
method] (String): HTTP method, default isGET.[
status] (Number): HTTP status code for redirection, default is301.
[
compression] (Object): See here for compression options.[
defaultLocale] (String): A locale string used as fallback locale, e.g.id-id,en-id, etc.[
siteLocales] (Array.<String>): An array of locale string supported by your app.
Returns
(Express.Router): An object of express router.
Examples
Basic Usage
const express = require('express');
const next = require('next');
const { createRouter } = require('soya-next/server/router');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
app.prepare()
.then(() => {
const server = express();
server.use(createRouter(app));
server.listen(3000, err => {
if (err) {
throw err;
}
console.log('> Ready on http://localhost:3000');
});
})
.catch(ex => {
console.error(ex.stack);
process.exit(1);
});Options
compression
compressionconst next = require('next');
const zlib = require('zlib');
const { createRouter } = require('soya-next/server/router');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
createRouter(app, {
compression: {
chunkSize: zlib.Z_DEFAULT_CHUNK, // 16 * 1024 or 16384
filter: (req, res) => {
if (req.headers['x-no-compression']) {
// don't compress responses with this request header
return false;
}
// fallback to standard filter function
return compression.filter(req, res);
},
level: zlib.Z_DEFAULT_COMPRESSION, // -1 or 6
memLevel: zlib.Z_DEFAULT_MEMLEVEL, // 8
strategy: zlib.Z_DEFAULT_STRATEGY,
threshold: '1kb',
windowBits: zlib.Z_DEFAULT_WINDOWBITS, // 15
},
});defaultLocale and siteLocales
defaultLocale and siteLocalesconst next = require('next');
const zlib = require('zlib');
const { createRouter } = require('soya-next/server/router');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
createRouter(app, {
defaultLocale: 'en-id', // must be available in siteLocales
siteLocales: [
'id-id',
'en-id',
],
});redirects
redirectsconst next = require('next');
const zlib = require('zlib');
const { createRouter } = require('soya-next/server/router');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
createRouter(app, {
redirects: {
'/post/:id': {
to: '/p/:id', // must target available routes
},
},
routes: {
'/p/:id': {
page: '/post',
},
},
});routes
routesconst next = require('next');
const zlib = require('zlib');
const { createRouter } = require('soya-next/server/router');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
createRouter(app, {
routes: {
'/p/:id': {
page: '/post',
},
},
});Last updated