在Express.js中设置默认视图路径

时间:2015-10-28 06:11:19

标签: express view

源代码

app.js

var express = require('express');
var app = express();
var path = require('path');
var viewPath = path.join(__dirname, 'app/views');

app.set('views', viewPath);
app.set('view engine', 'jade');

app.get('/', function(req, res) {
    res.render('index', { title: 'Home Page' } );
});

app.listen(3000);

文件夹结构

app
└───views     
│        └───index.jade
└───app.js

浏览器错误

错误:无法在视图目录index

中查找视图d:\Users\Admin\Documents\...\project\views

问题

我想通过将视图文件放在app/views/*.jade中来构建我的应用程序,但到目前为止我无法使用它,使用app.set('views', ...)应该可以工作,但它不会

console.log(viewPath)显示d:\Users\Admin\Documents\...\project\app\views

我也试过例如app.set('views', 'xxx')但错误仍然停留在同一条路径上,似乎app.set()从未被调用过,这里有什么问题?请指导。

由于

修改

使用app.set('views', 'xxx')设置的内容并不重要,错误始终是错误:无法在视图目录index中查找视图d:\Users\Admin\Documents\...\project\views(始终保持说明相同的路径)

我很抱歉router.get('/', ...),我的实际项目文件不同,所以我在这里犯了错误

5 个答案:

答案 0 :(得分:6)

尝试使用

app.set('views', path.join(__dirname, 'views'));

您的app.js位于app文件夹中,因此我认为

var viewPath = path.join(__dirname, 'app/views');

app.set('views', viewPath);
由于app/app/views/

会调查app/views/而不是__dirname __dirname是当前正在执行的脚本所在的目录。

答案 1 :(得分:0)

如Roxinagi所述,您应该使用app.get()。 其他一切似乎都很好

app.get('/', function(req, res) {
   res.render('index', { title: 'Home Page' } );
});

答案 2 :(得分:0)

我实际上已在项目中分隔了文件,因此我在分隔的路径文件中有app.get('/', ...),然后要求它与app.use()一起使用

我真的没有任何想法,但在仅将app.get('/', ...)移至app.js之后,问题已经解决了

谢谢大家

答案 3 :(得分:0)

我知道为时已晚,但可能会帮助遇到相同问题的人。如果将渲染代码放在单独的文件中,则需要使用express.Router而不是app.get。例如,

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

router.get('/', (req, res) => {
  res.render('index', {title: 'Hey', message: 'Hello there!'});
});

module.exports = router;

然后在您的app.js

const router = require('./app/routes/routerName');
app.use('/', router);

答案 4 :(得分:0)

const path = require('path')
app.set('views', path.join(__dirname, 'app/views/'))
app.set('view engine','jade');