我有一个带有基本快速路由的超级简单的node + express + handlebars应用。我的应用程序路由在根目录中工作正常,但是当我将所有内容移到app
文件夹中进行清理时,事情以我似乎无法弄清的方式破裂。
原始项目结构:
└─ public
│ └─ images
│ └─ scripts
│ views
│ └─ layouts
│ │ └─ main.hbs
│ └─ partials
│ │ └─ footer.hbs
│ │ └─ header.hbs
│ └─ error-404.hbs
│ └─ index.hbs
│ └─ work.hbs
└─ package.json
└─ routes.js
└─ server.js
现在,我将public
,views
,routes.js
和server.js
文件移到了根目录app
中。
在server.js
内部:
const path = require('path');
const express = require('express');
const app = express();
const hbs = require('express-handlebars');
const router = require(path.join(__dirname, 'routes')); // working
app.use('/static', express.static(path.join(__dirname, 'public'))); // working
app.set('view engine', '.hbs');
app.engine('hbs', hbs( {
defaultLayout: 'index',
extname: '.hbs',
layoutsDir: path.join(__dirname, 'views/layouts'), // this no longer works
partialsDir: path.join(__dirname, 'views/partials') // this no longer works
}));
app.use('/', router); // working if I just use something like res.send('Hello');, instead of using the handlebars rendering
在routes.js
内
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.render('index', { // should render /app/views/index.hbs as page content
layout: 'main', // should render /app/views/layouts/main.hbs as page layout
script: 'index', // should loads /app/public/scripts/index.js
title: 'Home'
});
});
// ...
module.exports = router;
我尝试将app
添加到hbs
引擎路径中,使其成为相对路径,但似乎无济于事。加载静态文件仍然有效,因此我认为它必须是视图引擎?
我确实必须将package.json的脚本nodemon server.js
更改为nodemon app/server.js
。
任何帮助将不胜感激。