当我调用res.render()时,我想更改Express的视图文件夹.
例如,如果我在/folder/file.js中调用res.render(viewName),我希望Express查找/ folder/views中的视图.
如果文件在/folder1/folder2/file.js中,我希望Express查找/ folder1/folder2/views中的视图
可能吗 ?
小智 106
您可以使用该方法set()重新定义express的默认设置.
app.set('views', path.join(__dirname, '/yourViewDirectory'));
对于动态路径更改,您可以执行以下操作:
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);
nuz*_*ilo 50
您可以传递相对路径或绝对路径,而不是简单地将视图名称传递给渲染函数.
简单的例子:
app.get('/your/path', function(req, res) {
    //viewname can include or omit the filename extension
    res.render(__dirname + '/folder/with/views/viewname'); 
});??????????
这很简单
当调用res.render()时更改Express的视图文件夹,只需设置视图所在的路径,在您的情况下,
app.set('views','./folder1/folder2/views');
这会更改Express搜索指定视图的路径.
设置查看位置的路径。
app.set('views', path.join(__dirname, '/views'));
设置视图引擎。
app.set('view engine','ejs');
完整的代码如下所示。
const express = require('express');
const path = require('path');
const app = express();
app.set('views', path.join(__dirname, '/views'));
app.set('view engine','ejs');
app.listen(3000, () => console.log('Application is running on'));
小智 5
(抱歉我还不能评论)
@nuzzolilo 的回答很有效。但如果你更喜欢 ES6
app.get('/path', function (req, res) {
    res.render(`${__dirname}/templates_dir/index`, { data: "value" });
});
这只是提高了代码的可读性;)
| 归档时间: | 
 | 
| 查看次数: | 64718 次 | 
| 最近记录: |