Node.js Express.js(4.13.1)和Handlebar视图引擎-如何设置?
我的项目目录称为travel,它具有必需的依赖项node_模块和一个称为views的子目录。视图子目录有layouts子目录。在~/travel/views/layouts中有用于视图的.handlebar模板。但当我进入浏览器并键入localhost:3000/about或localhost:3000时,不管我得到404-notfound,我都尝试切换res.renderabout;恢复渲染/视图/布局/关于;但这也行不通。这与路径有关,但我不确定是什么Node.js Express.js(4.13.1)和Handlebar视图引擎-如何设置?,node.js,express,handlebars.js,Node.js,Express,Handlebars.js,我的项目目录称为travel,它具有必需的依赖项node_模块和一个称为views的子目录。视图子目录有layouts子目录。在~/travel/views/layouts中有用于视图的.handlebar模板。但当我进入浏览器并键入localhost:3000/about或localhost:3000时,不管我得到404-notfound,我都尝试切换res.renderabout;恢复渲染/视图/布局/关于;但这也行不通。这与路径有关,但我不确定是什么 var express=require
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,");
});
假设在与Express应用程序脚本相同的目录中有一个名为views的子目录,则需要将Express设置为: 默认情况下,路径相对于当前工作目录
此外,您可能希望将express3 Handlebar模块更新为express3 Handlebar,因为后者是两个模块中较新的一个,并且是当前维护人员推荐的。请通过覆盖默认布局尝试此操作
app.get('/', function (req, res, next) {
res.render('home', {layout: false}); });
res.render./views/layouts/about会发生什么?请注意前面的点。向我们显示您的应用程序文件夹structure@sam100rav我的项目根目录-~/travel,其中包含travel.js,如上图所示,以及2个文件夹-node_modules文件夹和views文件夹。“视图”文件夹包含layouts文件夹,其中包含/about和/的.handlebar模板。因此视图的模板位于~/travel/views/layouts中,我还将我的工作目录设置为~/travel@hassansin都一样。不起作用我试图将.handlebar模板从~/travel/views/layouts移动到~/travel,但仍然不起作用
app.get('/', function (req, res, next) {
res.render('home', {layout: false}); });