Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js Express上的多个视图路径大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用Express Framework在Node.js上编写一个CMS。在我的CMS上,我有几个模块用于用户页面等。

我想让每个模块将他的文件在单独的文件夹,包括视图文件
任何人都知道如何实现呢?

我使用swig作为我的模板引擎,但我可以替换它的东西,如果它会有所帮助。

解决方法

最后更新

从Express 4.10开始,框架支持多视图文件功能

只需传递一个位置数组到views属性,就像这样。

app.set('views',[__dirname + '/viewsFolder1',__dirname + '/viewsFolder2']);

Express 2.0

据我所知,express不支持多个视图路径或命名空间(如静态中间件)

但是你可以自己修改查找逻辑,使其工作方式你想要的,例如:

function enableMultipleViewFolders(express) {
    // proxy function to the default view lookup
    var lookupProxy = express.view.lookup;

    express.view.lookup = function (view,options) {
        if (options.root instanceof Array) {
            // clones the options object
            var opts = {};
            for (var key in options) opts[key] = options[key];

            // loops through the paths and tries to match the view
            var matchedView = null,roots = opts.root;
            for (var i=0; i<roots.length; i++) {
                opts.root = roots[i];
                matchedView = lookupProxy.call(this,view,opts);
                if (matchedView.exists) break;
            }
            return matchedView;
        }

        return lookupProxy.call(express.view,options)
    };
}

您将通过调用上述函数并将express作为参数传递来启用新逻辑,然后您将能够为配置指定一个视图数组:

var express = require('express');
enableMultipleViewFolders(express);
app.set('views',__dirname + '/viewsFolder2']);

或者,如果你喜欢,你可以直接修补框架(更新其中的view.js文件)

这应该工作在Express 2.x,不知道如果它将与新版本(3.X)

更新

不幸的是上面的解决方案不会在Express 3.x中工作,因为express.view将是未定义的

一个可能的解决方案是代理response.render函数并设置views文件夹config,直到它获得匹配:

var renderProxy = express.response.render;
express.render = function(){
    app.set('views','path/to/custom/views');
    try {
        return renderProxy.apply(this,arguments);
    }
    catch (E) {}
    app.set('views','path/to/default/views');       
    return renderProxy.apply(this,arguments);
};

我没有测试它,它感觉非常hacky对我反正,不幸的是这个功能已被推回了:
https://github.com/visionmedia/express/pull/1186

更新2

功能已在Express 4.10中添加,因为以下拉式请求已合并:
https://github.com/strongloop/express/pull/2320

大佬总结

以上是大佬教程为你收集整理的Node.js Express上的多个视图路径全部内容,希望文章能够帮你解决Node.js Express上的多个视图路径所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。