Node.js express服务渲染index.pug失败,提示在views目录找不到对应视图
问题原因
你遇到的报错核心是路径格式错误,有两个具体问题:
import.meta.url返回的是带file://前缀的File URL,不是本地文件系统的普通路径,直接传给path.join或者做字符串拼接都会生成无效路径import.meta.url指向的是当前app.js文件本身,不是它所在的目录,直接拼接/public会把文件名也纳入路径,导致路径指向不存在的位置
修复方案
- 先导入必要方法,获取当前文件所在目录的合法绝对路径:
import express from 'express'; const app = express(); import path from 'path'; // 新增导入url模块的fileURLToPath方法 import { fileURLToPath } from 'url'; import { sequelize } from './db/db.js'; // 新增:获取当前文件的绝对路径、所在目录路径 const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename);
- 替换两处错误的路径配置:
// 静态资源配置修改为 app.use('/public', express.static(path.join(__dirname, "public"))); // 视图目录配置修改为 app.set('views', path.join(__dirname, "public/views"));
- (可选优化)你已经配置了
view engine为pug,渲染时可以省略后缀:
routerHome.get("/", (req, res) => { res.render("index"); });
目录校验
请确认你的项目目录结构符合如下层级:
你的项目目录/ ├─ app.js └─ public/ └─ views/ └─ index.pug
如果public目录不在app.js同级,只需要调整path.join里的相对路径参数即可,比如public在上一级目录就改成path.join(__dirname, "../public/views")。
内容的提问来源于stack exchange,提问作者Gonsa02
相关产品推荐
相关产品推荐

