如何将Express-Handlebars助手函数重构至独立文件并注册?
如何将Express-Handlebars助手函数拆分为独立文件?
当然可以把助手函数拆分成独立文件,这样不仅能让app.js更清爽,也方便单独维护每个助手的逻辑。下面是完整的实现步骤和示例:
第一步:创建助手文件目录结构
首先在项目根目录下新建一个helpers文件夹,每个助手函数单独放在一个.js文件里:
your-project/ ├── app.js ├── helpers/ │ ├── index.js # 用来统一加载所有助手 │ ├── foo.js # 第一个助手 │ └── bar.js # 第二个助手
第二步:编写单个助手文件
每个助手文件只导出对应的函数,保持逻辑单一:
helpers/foo.js:
module.exports = function() { return 'FOO!'; };
helpers/bar.js:
module.exports = function() { return 'BAR!'; };
第三步:统一加载所有助手
在helpers/index.js里,我们可以利用Node.js的fs模块自动读取目录下的所有助手文件,把它们整理成一个可直接使用的对象:
const fs = require('fs'); const path = require('path'); module.exports = function() { const helpers = {}; // 过滤掉index.js本身,只加载其他助手文件 const helperFiles = fs.readdirSync(__dirname).filter(file => file !== 'index.js'); helperFiles.forEach(file => { // 用文件名作为助手的名称 const helperName = path.basename(file, '.js'); helpers[helperName] = require(`./${file}`); }); return helpers; };
这种方式的好处是,以后新增助手文件时,不需要手动修改这个加载文件,它会自动识别并加载新的助手。
第四步:在app.js中引入并注册助手
回到app.js,只需要导入我们的助手加载模块,然后把它传给express-handlebars的配置即可:
const express = require('express'); const exphbs = require('express-handlebars'); const loadHelpers = require('./helpers'); const handlebars = exphbs.create({ defaultLayout: 'index', extname: 'hbs', helpers: loadHelpers() // 这里加载所有外部助手 }); const app = express(); // 注册handlebars模板引擎 app.engine('hbs', handlebars.engine); app.set('view engine', 'hbs'); // 其他app配置和路由逻辑...
这样就完成了拆分!以后你可以在helpers文件夹里随意添加新的助手文件,它们会自动被注册到Handlebars中,app.js也不会被大量的助手逻辑塞满了。
内容的提问来源于stack exchange,提问作者peterHasemann
相关产品推荐
相关产品推荐

