I would like to change the view folder of Express when I call res.render().
For example, if I call res.render(viewName) inside /folder/file.js, I would like that Express look for the view inside /folder/views.
If the file is inside /folder1/folder2/file.js, I would like that Express look for the view inside /folder1/folder2/views
Is it possible ?
You can use the method set() to redefine express's default settings. app. set('views', path. join(__dirname, '/yourViewDirectory'));
The res. render() function is used to render a view and sends the rendered HTML string to the client.
render() method is used for returning the rendered HTML of a view using the callback function. This method accepts an optional parameter that is an object which contains the local variables for the view. This method is similar to the res.
You can use the method set()
to redefine express's default settings.
app.set('views', path.join(__dirname, '/yourViewDirectory'));
For a dynamic path change you can do something like this:
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With