如何使用Express,Handlebars和Conslidate在Node.js中设置path
我有一个工作的Node.js网站,使用Express.js,Handlebars.js和Consolidate.js。 我想为我的模板的公共部分使用partials,但是不能解决如何使它们适用于不同URL的页面。
我的/views/
目录包含这个:
_footer.html _header.html article.html index.html
我的Node应用程序的相关部分如下所示:
var express = require('express'), consolidate = require('consolidate'), handlebars = require('handlebars'), path = require('path'); var app = express(); app.engine('html', consolidate.handlebars); app.set('view engine', 'html'); app.set('views', path.join(__dirname, '/views')); var partials = {header: '_header', footer: '_footer'}; app.get('/', function(req, res) { res.render('index', {partials: partials}); }; app.get(/^\/([\w-]+)\/$/, function(req, res) { res.render('article', {partials: partials}); };
在我的index.html
和article.html
Handlebars模板中,我有这样的东西:
{{> header}} <!-- page content here --> {{> footer }}
我应该可以访问/
(当index.html
呈现时)和/foo/
(当article.html
呈现时)。 但是它只适用于启动节点服务器后首先尝试访问的任何一个。 当我然后导航到另一个path,我得到如下错误:
Error: ENOENT, no such file or directory '/Users/phil/Projects/projectname/views/<!DOCTYPE html>...
其余的_header.html
部分关注。
我想我需要以某种方式设置我的偏见的path是绝对的,但我不明白如何做到这一点。
为巩固检查: https : //github.com/tj/consolidate.js/issues/18
我build议切换到一些更具体的,如https://github.com/donpark/hbs它会更简单。