当我调用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'));
对于动态路径更改,您可以这样做:
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);