koa2 view render based on nunjucks, support asynchronous filters.
npm install koa-nunjucks-next
Do not use babel compile。
root
: (defaultviews
) Views location. All views yourender()
are relative to this path.opts
nunjucks configure optsopts.globals
: nunjucks global values that will be available to all templatesopts.filters
: nunjucks filters, support asynchronous filteropts.extensions
: nunjucks extensions (e.g. highlight code blocks)
filters: {
asyncAdd1: (val1, val2) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(val1 + val2), 2000);
});
},
asyncAdd2: async (val1, val2) => {
let val3 = await new Promise((resolve, reject) => {
setTimeout(() => resolve(100), 1000);
});
return await new Promise((resolve, reject) => {
setTimeout(() => resolve(val1 + val2 + val3), 2000);
});
},
syncAdd: (val1, val2) => {
return val1 + val2;
}
}
opts.extname
: (defaulthtml
) Extension for your views
// instead of this
await ctx.render('test.html')
// you can
await ctx.render('test')
// renders a template
await ctx.render('test', {})
// renders a raw string
await ctx.render('{{ val1 | asyncAdd1(1) }}', { val1: 66666 }, true)
let views = require('koa-nunjucks-next');
app.use(views('../views', {
filters: {
asyncAdd: (val1, val2) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(val1 + val2), 2000);
});
},
syncAdd: (val1, val2) => {
return val1 + val2;
}
}
}));
router.get('/test-template', async (ctx, next) => {
await ctx.render('test', {
'val1': 66666
});
});
router.get('/test-string', async (ctx, next) => {
await ctx.render('{{ val1 | asyncAdd(1) }}', {
'val1': 66666
}, true);
}); //==> 66667