egg-view-nunjucks

    2.3.0 • Public • Published

    egg-view-nunjucks

    NPM version build status Test coverage David deps Known Vulnerabilities npm download

    nunjucks view plugin for egg.

    Install

    $ npm i egg-view-nunjucks --save

    Usage

    // {app_root}/config/plugin.js
    exports.nunjucks = {
      enable: true,
      package: 'egg-view-nunjucks',
    };

    Set mapping in config

    // {app_root}/config/config.default.js
    exports.view = {
      defaultViewEngine: 'nunjucks',
      mapping: {
        '.nj': 'nunjucks',
      },
    };

    Render in controller

    // {app_root}/app/controller/test.js
    class TestController extends Controller {
      async list() {
        const ctx = this.ctx;
        // ctx.body = await ctx.renderString('{{ name }}', { name: 'local' });
        // not need to assign `ctx.render` to `ctx.body`
        // https://github.com/mozilla/nunjucks/blob/6f3e4a36a71cfd59ddc8c1fc5dcd77b8c24d83f3/nunjucks/src/environment.js#L318
        await ctx.render('test.nj', { name: 'view test' }, {
          path: '***'
        });
      }
    }

    Feature

    Filter

    • escape filter is replaced by helper.escape which is provided by egg-security for better performance
    • Add your filters to app/extend/filter.js, then they will be injected automatically to nunjucks
    // {app_root}/app/extend/filter.js
    exports.hello = name => `hi, ${name}`;
    
    // so you could use it at template
    // {app_root}/app/controller/test.js
    class TestController extends Controller {
      async list() {
        const ctx = this.ctx;
        ctx.body = await ctx.renderString('{{ name | hello }}', { name: 'egg' }, {
          path: '***'
        });
      };
    }

    Tag

    you can extend custom tag like this:

    // {app_root}/app.js
    const markdown = require('nunjucks-markdown');
    const marked = require('marked');
    
    module.exports = app => {
      markdown.register(app.nunjucks, marked);
    };

    Security

    see egg-security

    • auto inject _csrf attr to form field
    • auto inject nonce attr to script tag

    Helper / Locals

    • you can use helper/ctx/request in template, such as helper.shtml('<div></div>')
    • nunjucks build-in filters is injected to helper, such as helper.upper('test')
    • helper.shtml/surl/sjs/escape is auto wrapped with safe

    More

    • app.nunjucks - nunjucks environment
    • app.nunjucks.cleanCache(fullPath/tplName) to easy clean cache, can use with custom egg-watcher

    Configuration

    see config/config.default.js for more detail.

    Questions & Suggestions

    Please open an issue here.

    License

    MIT

    Install

    npm i egg-view-nunjucks

    DownloadsWeekly Downloads

    5,914

    Version

    2.3.0

    License

    MIT

    Unpacked Size

    16.9 kB

    Total Files

    13

    Last publish

    Collaborators

    • atian25
    • dead_horse
    • fengmk2
    • popomore
    • eggjs-admin