Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. /*
  2. USAGE:
  3.  
  4. import njk from './nunjucks';
  5.  
  6. // Templating - Must be used before any router
  7. app.use(njk(path.join(__dirname, 'views'), {
  8. extname: '.njk',
  9. noCache: process.env.NODE_ENV !== 'production',
  10. throwOnUndefined: true,
  11. filters: {
  12. json: function (str) {
  13. return JSON.stringify(str, null, 2);
  14. },
  15. upperCase: str => str.toUpperCase(),
  16. },
  17. globals: {
  18. version: 'v3.0.0',
  19. },
  20. }));
  21.  
  22. */
  23.  
  24. const Promise = require('bluebird');
  25. const nunjucks = require('nunjucks');
  26.  
  27. function njk(path, opts) {
  28. const env = nunjucks.configure(path, opts);
  29.  
  30. const extname = opts.extname || '';
  31.  
  32. const filters = opts.filters || {};
  33. //console.time('benchmark');
  34. const f = Object.keys(filters).length;
  35. let i = 0;
  36. while (i < f) {
  37. env.addFilter(Object.keys(filters)[i], Object.values(filters)[i]);
  38. i += 1;
  39. }
  40. //console.timeEnd('benchmark');
  41.  
  42. const globals = opts.globals || {};
  43. const g = Object.keys(globals).length;
  44. let j = 0;
  45. while (j < g) {
  46. env.addFilter(Object.keys(globals)[j], Object.values(globals)[j]);
  47. j += 1;
  48. }
  49.  
  50. return (ctx, next) => {
  51. ctx.render = (view, context = {}) => {
  52. context = Object.assign({}, ctx.state, context);
  53. return new Promise((resolve, reject) => {
  54. nunjucks.render(`${view}${extname}`, context, (err, res) => {
  55. if (err) {
  56. return reject(err);
  57. }
  58. ctx.body = res;
  59. return resolve();
  60. });
  61. });
  62. };
  63. return next();
  64. };
  65. }
  66.  
  67. module.exports = njk;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement