繁体   English   中英

通过JavaScript将Jade mixins包含在Express应用中

[英]Include Jade mixins via JavaScript in an Express app

在我的Express应用程序中,我有一个包含很多有用的Jade mixins的文件。 我想在多个项目中使用该文件,因此我计划创建一个NPM模块(由我们公司的私有注册表自行托管),该模块将在每个呈现的页面(或仅特定页面)中包含此mixins文件。

有没有办法从后端代码(可能使用Express)做到这一点? 还是我可以使用其他方法?

基本上,我只是不想最终在每个项目中都这样做:

layout.jade

include ../../node_modules/my-custom-module/mixins

这将是丑陋的。

您需要使用Jade API手动编译文件/视图,并在编译之前将mixins文件附加到视图。

var jade = require('jade');
var yourJadeMixinStr = fs.readFileSync('..mixins', 'utf8');
app.use(function(req, res, next) {
    var render = res.render;
    res.render = function(view, options){

        var yourJadeViewPath = '../views/' + view + '.jade';
        var yourJadeViewStr = fs.readFileSync(yourJadeViewPath, 'utf8');

        options = extend({}, options, res.locals);
        options.filename = yourJadeViewPath;

        var finalJadeViewStr = yourJadeMixinStr + yourJadeViewStr;
        var html = jade.render(finalJadeViewStr, options);

        res.send(html);
    };
    next();
});

options.filename是视图中任何include语句的相对路径所必需的。 它也似乎用于引擎盖下的缓存目的

如果您使用app.set('views', […])传递多个目录以寻找视图,则需要考虑这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM