如何在除app.js之外的Express.js文件中放置Nunjucks addfilter函数?

时间:2018-01-18 22:08:08

标签: node.js express module require nunjucks

我正在nunjucks express文件中初始化app.js,并在同一个文件中注册自定义addfilter函数:

  // get needed packages
const nunjucks = require('nunjucks');

  // config view engine
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

  // set variable
const env = nunjucks.configure('views', {
  autoescape: true,
  express: app
});

  // register custom helper
env.addFilter('shorten', function(str, count) {
  return str.slice(0, count || 5);
});

但是,我想要添加更多这些addfilter函数,但我不想将它们放在我的app.js文件中。具体来说,我想把它们放在这里:

node-project/views/helpers/nunjucks_helpers.js

什么是节点表达方式配置此包以在所述其他文件中注册这样的自定义过滤器?

2 个答案:

答案 0 :(得分:2)

最小代码更改

在nunjucks_helpers.js中创建一个以env作为参数并将其导出的函数:

// helpers/nunjucks_helpers.js
function addNunjucksFilters(nunjucksEnvironment) {
  nunjucksEnvironment.addFilter(...);
  // Add all your other calls to addFilter here
}

module.exports = addNunjucksFilters;

然后将其导入app.js并调用它:

// app.js
var addNunjucksFilters = require('./helpers/nunjucks_helpers.js'); // Path might be different - depends on where you put app.js
// ... your existing code
addNunjucksFilters(env);

有关包含其他文件in this Q and A的功能的详细信息。

关注点分离

为了更好地分离问题,你可以从app.js中移除与nunjucks相关的所有内容:

// helpers/nunjucks-helper.js:
const nunjucks = require('nunjucks');

function setUpNunjucks(expressApp) {
  const env = nunjucks.configure('views', {
    autoescape: true,
    express: app
  });

  // register custom helper
  env.addFilter('shorten', function(str, count) {
    return str.slice(0, count || 5);
  });
  // ... your other filters here
}

让你的app.js看起来更干净:

// app.js
const setUpNunjucks = require('./helpers/nunjucks_helpers.js');

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
setUpNunjucks(app);

答案 1 :(得分:1)

我的原始代码中有一个错误,使其成为Stone回答的 Separation of Concerns 部分。这是一个很好的提示,如果您更改该块以正确设置nunjucks env变量,一切正常:

// helpers/nunjucks-helper.js:
const nunjucks = require('nunjucks');

function setUpNunjucks(expressApp) {
  // set variable
  const env = nunjucks.configure('views', {
    autoescape: true,
    express: app
  });

  // register custom helper
  env.addFilter('shorten', function(str, count) {
    return str.slice(0, count || 5);
  });
  // ... your other filters here
}