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

例如,如果我在/folder/file中调用res.render(viewName).js,我想快速查找/folder/views中的视图.

如果文件位于/folder1/folder2/file中.js,我想快速查看/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);

Node.js相关问答推荐

需要关于基于角色授权的设计建议

使用HTTPS从NodeJS 17.9.1升级到18.0.0后,SignalR连接失败

如何使用MongoDB在Node.js 中向数组中添加项?

Mongoose更新在^8.0.3版中,许多似乎不能按预期工作

NPM:无法导入本码模块

控制台显示一个长对象,我可以';每当我发布更新Mongoose数据库的请求时,我都不知道错误是什么,

Nestjs重写子类dto nodejs中的属性

PM2 是否需要成为其托管项目的依赖项?

Typescript 正则表达式:过滤器返回空

yarn 安装失败,因为 node-gyp 正在寻找过时的 node 版本标头

NodeJS 中的流 API 数据如何流动?

nuxt:在 docker 镜像中找不到

使用Typescript 时我应该避免循环导入吗?

Mongoose-更新嵌套数组

node.js 变量不存在代码块

无法获取 CSS 文件

使用 ES6 语法和动态路径导入模块

AngularJS +sails.js

如何运行用 TypeScript 编写的 Mocha 测试?

如何让 Mocha 加载定义全局挂钩或实用程序的 helper.js 文件?