ExpressJS Views文件夹未呈现

时间:2019-01-02 15:20:19

标签: express pug

使用Express和pug模板,不能正确呈现views文件夹中的所有文件。在app.js中,views文件夹被指定为view目录,而pug被列为模板引擎。

我找不到丢失的东西。

这是文件:

index.pug:

extends layout

block content
  h1= title
  p Welcome to #[em LocalLibrary], a very basic Express website developed as a tutorial example on the Mozilla Developer Network.

  h1 Dynamic content

  if error
    p Error getting dynamic content.
  else
    p The library has the following record counts:

    ul
      li #[strong Books:] !{data.book_count}
      li #[strong Copies:] !{data.book_instance_count}
      li #[strong Copies available:] !{data.book_instance_available_count} 
      li #[strong Authors:] !{data.author_count}
      li #[strong Genres:] !{data.genre_count}

控制器:

var Book = require('../models/book');
var Author = require('../models/author');
var Genre = require('../models/genre');
var BookInstance = require('../models/bookinstance');

var async = require('async');

exports.index = function(req, res) {

    async.parallel({
        book_count: function(callback) {
            Book.countDocuments({}, callback); // Pass an empty object as match condition to find all documents of this collection
        },
        book_instance_count: function(callback) {
            BookInstance.countDocuments({}, callback);
        },
        book_instance_available_count: function(callback) {
            BookInstance.countDocuments({status:'Available'}, callback);
        },
        author_count: function(callback) {
            Author.countDocuments({}, callback);
        },
        genre_count: function(callback) {
            Genre.countDocuments({}, callback);
        }
    }, function(err, results) {
        res.render('index', { title: 'Local Library Home', error: err, data: results });
    });
};

app.js包括以下设置pug作为引擎,并将views文件夹作为视图文件的位置:

...

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

...

1 个答案:

答案 0 :(得分:0)

对于其他任何人,查看此内容,我发现在此SO答案中似乎起作用:Express ignoring views directory

layout: false添加到控制器路由,可以正确显示views文件夹中的文件。

在上面的控制器文件中,我更改了

res.render('index', { title: 'Local Library Home', error: err, data: results });

res.render('index', { layout: false, title: 'Local Library Home', error: err, data: results });

希望我不必为每个控制器操作分别执行此操作,但很高兴看到它能正常工作...

随后,更正了app.js中的路径,而不是修复了每个单独的控制器:

更改了此内容

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

对此:

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

并且视图正确呈现。