首页 > 解决方案 > 无法在视图目录中查找视图“index.pug”

问题描述

我正在尝试使用 nodejs 服务器渲染 index.pug,但它不起作用。index.pug 位于子目录/public/views中。这是代码:

import express from 'express';
const app = express();
import path from 'path';
import { sequelize } from './db/db.js';

// SERVER CONFIGURATION
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Listening at ${PORT}`);
  sequelize.sync({ force: false })
    .then(() => console.log('Database Connected!'))
    .catch(err => console.log(err));
});

// VIEW SETTINGS
app.use('/public', express.static(import.meta.url + "/public"));
app.set("view engine", "pug");
// app.engine('html', require('ejs').renderFile);
app.set('views', path.join(import.meta.url, "../public/views"));

// BODYPARSER
app.use(express.urlencoded({ extended: false }));
app.use(express.json());


const routerHome = express.Router();

routerHome.get("/", (req, res) => {
  res.render("index.pug");
});

app.use(routerHome);

不能工作的一件事是,当我执行 import.meta.url 时,它会导入 all_directories/app.js,然后可能express.static(import.meta.url + "/public")会是all_directories/app.js/public不存在的。

如果有人知道发生了什么,我将非常感谢您帮助我。

我得到的错误如下:

错误:无法在视图目录“file:/home/marc/Disco/Projects/Gym/public/views”中查找视图“index.pug”

标签: node.jsexpress

解决方案


在错误信息中:Failed to lookup view "index.pug" in views directory "file:/home/marc/Disco/Projects/Gym/public/views",奇怪的目录开始file:/,正确的路径应该是/home/marc/Disco/Projects/Gym/public/views.

我认为你不应该混淆文件 URL 和文件路径。如果您在子目录中有视图文件,在/public/views子目录中有静态文件/public,则视图配置应更改为:

// VIEW SETTINGS
app.use('/public', express.static(import.meta.url + "/public"));
app.set("view engine", "pug");
// app.engine('html', require('ejs').renderFile);
app.set('views', path.join(import.meta.url, "../public/views"));

至 :

// VIEW SETTINGS
app.use('/public', express.static("public")); // serve static files in public subdirectory under /public virtual path
app.set("view engine", "pug");
app.set('views', path.join(__dirname, "./public/views")); // use pug templates file in /public/views subdirectory

推荐阅读