ExpressJS 中 render 方法如何渲染 views/ 的子目录文件夹中的模板?

app.js文件下设置:

// 设置 view 引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static('public'));

假设文件夹目录如下:

|- views
    |- flie
        |- index.ejs
    |- index.ejs

假设我写的路由文件:

app.get('\', function (req, res) {
    res.render('index'); // √
});
app.get('\file', function (req, res) {
    res.render('file/index'); // ×
});

请问render方法如何去渲染views/file/index.ejs文件?而不是根目录下的index.ejs文件。

阅读 10k
3 个回答
app.get('\', function (req, res) {
    res.render('index'); // √
});
app.get('\file', function (req, res) {
    res.render('file/index'); // ×
});

首先你贴出来的代码是错误的路由路径不可能有反斜杠出现的应该是’/'而不是’\‘
你的第二做法:res.render('file/index')是没有问题的

我也遇到这个问题了

目录结构与上面的类似

views
    - admin
        -index.ejs 这是我要渲染的文件
        -error.ejs
        -alluser.ejs
    - user

路由
app.js 文件

 var app = express()
app.use("/admin/index", (req, res)=> {
    // 这里的admin前面不要加/ 不然会有问题
    res.render("admin/index")
})

app.use("/admin/error", (req, res)=> {
    // 这里的admin前面不要加/ 不然会有问题
    res.render("admin/error")
})

如果你将上面的路由独立到app.js中,就按照下面的方式来写
app.js 文件中

var express = require("express")
var app = express()
// 导入admin.js这个路由文件,注意你自己的目录,这里我放在 routes目录下
var adminRouter = require("./routes/admin")

app.use("/admin", adminRouter)

在 routes/admin.js 文件中

var express = require('express');
var router = express.Router();

router.get("/index",(req, res)=> {
    res.render("admin/index")
})

router.get("/error", (req, res)=> {
    res.render("admin/error")
})

上面就是我的解答方式

请问楼主是怎么解决的这个问题。试了好多方法都不行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进