Измените папку Экспресс-просмотра на основе того, где находится файл, который Res.render() называется
Я хотел бы изменить папку просмотра Express, когда я вызываю res.render ().
например, если я вызываю res. render (viewName) внутри /папка/файл.js, я хотел бы, чтобы Экспресс-поиск вида внутри /папки/представлений.
Если файл находится внутри /folder1/folder2 / file.js, я хотел бы, чтобы Экспресс-поиск вида внутри / folder1/folder2 / views
возможно ли это ?
5 ответов:
вы можете использовать метод
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);
вместо простой передачи имени представления в функцию рендеринга можно передать относительный или абсолютный путь.
простой пример:
app.get('/your/path', function(req, res) { //viewname can include or omit the filename extension res.render(__dirname + '/folder/with/views/viewname')); });
Это довольно просто
изменить вид папки на экспресс, когда один называет РЭС.рендер(), просто установите путь, где расположены виды, в вашем случае,
app.set('views','./folder1/folder2/views');это изменяет путь, по которому Express будет искать указанные представления.
(Извините, я пока не могу комментировать)
@nuzzolilo это работает хорошо. Но если вы предпочитаете ES6
app.get('/path', function (req, res) { res.render(`${__dirname}/templates_dir/index`, { data: "value" }); });Это просто улучшает читаемость кода;)
вы также можете получить относительный путь с помощью
require.resolve:res.render(require.resolve('./folder/with/views/viewname'));
Comments