node.js – 根据res.render()被调用的文件的位置,更改Express视图文件夹

当我调用res.render()时,我想更改Express的视图文件夹。

例如,如果我调用res.render(viewName)在/folder/file.js里面,我希望Express查找/ folder / views中的视图。

如果文件在/folder1/folder2/file.js中,我希望Express查找/ folder1 / folder2 / views中的视图

可能吗 ?

解决方法

您可以使用方法set()重新定义express的认设置。

app.set('views',path.join(__dirname,'/yourViewDirectory'));

> Express documentation

对于动态路径更改,您可以这样做:

var express = require('express');
var path = require('path');
var app = express();

app.engine('jade',require('jade').__express);
app.set('view engine','jade');

app.customrender = function (root,name,fn) {

    var engines = app.engines;
    var cache = app.cache;

    view = cache[root+'-'+name];

    if (!view) {
        view = new (app.get('view'))(name,{
          defaultEngine: app.get('view engine'),root: root,engines: engines
        });

        if (!view.path) {
          var err = new Error('Failed to lookup view "' + name + '" in views directory "' + root + '"');
          err.view = view;
          return fn(err);
        }

        cache[root+'-'+name] = view;
    }

    try {
      view.render(opts,fn);
    } catch (err) {
      fn(err);
    }
}

app.get('/',function(req,res) {

    app.customrender(path.join(__dirname,'/path/to/user/'),'index',function (err,html) {
        if (err)
            res.send(404);
        else
            res.send(200,html);
    });

});

app.listen(3000);

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...