express-handlebars视图路径配置问题求助:无法定位profile视图文件
嘿,这个问题我之前也踩过坑!错误提示已经说得很清楚了——express-handlebars在项目根目录的views文件夹里找profile,但你的views明明在develop子文件夹里,所以肯定找不到嘛。
核心问题是你只配置了handlebars的layoutsDir,但没告诉express你的视图文件(就是home、profile这些.handlebars)的根目录在哪里,它默认就去项目根目录找了。给你一步步改:
第一步:在server.js里正确配置视图根目录
首先,你需要明确告诉express,你的views文件夹在develop/views下。修改server.js的代码:
const path = require('path'); const exphbs = require('express-handlebars'); // 先设置视图文件的根目录——因为server.js在develop文件夹里,__dirname就是develop的绝对路径 app.set('views', path.join(__dirname, 'views')); // 再配置handlebars引擎,这里可以复用上面设置的views路径,避免重复写 app.engine('handlebars', exphbs({ defaultLayout: 'main', layoutsDir: path.join(app.get('views'), 'layouts') // 这样layoutsDir就是develop/views/layouts,和你的结构对应 })); // 别忘了设置默认的视图引擎为handlebars app.set('view engine', 'handlebars');
第二步:简化htmlRoutes.js里的home路由
既然已经配置了视图根目录,你不用再写全路径了,直接render文件名就行:
把原来的:
router.get('/', (req, res) => { res.render(path.join(__dirname, '../views/home')) })
改成:
router.get('/', (req, res) => { res.render('home') })
第三步:userControl.js里的代码不用改
现在express-handlebars已经知道去develop/views找视图文件了,所以你原来的res.render('profile', { username: data.username, firstName: data.firstName, lastName: data.lastName })就能正常找到develop/views/profile.handlebars了。
补充说明
为什么之前会出错?因为express-handlebars的默认视图目录是项目根目录下的views,而你的视图文件都在develop/views里,你之前只指定了布局文件的位置,却没设置整个视图系统的根目录,所以它就去错地方找了。
现在重启服务器,访问/users/profile/:id应该就能正常渲染个人资料页啦!
内容的提问来源于stack exchange,提问作者easymoney

