当移动到子目录中时,为什么我的节点+无法表达路由工作?

时间:2019-08-21 19:14:58

标签: javascript node.js express handlebars.js express-handlebars

我有一个带有基本快速路由的超级简单的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

现在,我将publicviewsroutes.jsserver.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

任何帮助将不胜感激。

0 个答案:

没有答案