我的项目目录名为travel
,它具有必需的依赖项node_modules
和一个名为views
的子目录。 Views子目录具有layouts子目录。在~/travel/views/layouts
中,视图有.handlebar
个模板。但是,当我转到浏览器并输入localhost:3000/about
或localhost: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,");
});
答案 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}); });