Express.js(4.13.1)和Handlebars查看引擎 - 如何设置?

时间:2015-07-10 21:03:43

标签: node.js express handlebars.js

我的项目目录名为travel,它具有必需的依赖项node_modules和一个名为views的子目录。 Views子目录具有layouts子目录。在~/travel/views/layouts中,视图有.handlebar个模板。但是,当我转到浏览器并输入localhost:3000/aboutlocalhost:3000时,无论我是404 - not found,我都尝试将res.render("about");切换为res.render("/views/layouts/about");但是不工作。它与路径有关,但我不确定是什么。

var express=require("express");

var app=express();

// set up handlebars view engine
var handlebars=require("express3-handlebars")
    .create({defaultLayout:"main"});
app.engine("handlebars",handlebars.engine);
app.set("view engine","handlebars");

app.set("port",process.env.PORT || 3000);

app.get("/",function(req,res){
    res.render("home");
});
app.get("/about",function(req,res){
    res.render("about");
});


// custom 404 page (middleware)
app.use(function(req,res,next){
    res.status(404);
    res.render("404");
});

// custom 500 page (middleware)
app.use(function(err,req,res,next){
    console.error(err.stack);
    res.status(500);
    res.render("500");
});

app.listen(app.get("port"),function(){
    console.log("Express started on http://localhost:"+app.get("port")+";press ctrl+c to terminate,");
});

2 个答案:

答案 0 :(得分:0)

假设您在Express应用程序脚本所在的目录中有一个名为views的子目录,则需要将Express views app setting设置为:

app.set('views', __dirname + '/views');

默认情况下,路径相对于当前工作目录

此外,您可能希望将express3-handlebars模块更新为express-handlebars,因为后者是两者中的较新者,并且是当前维护者推荐的。

答案 1 :(得分:0)

通过覆盖默认布局

来尝试此操作
app.get('/', function (req, res, next) {
res.render('home', {layout: false}); });