[英]Failed to lookup view "index.pug" in views directory
我正在嘗試使用 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”
在錯誤消息中: 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
子目錄中有 static 文件,則視圖配置應更改為:
// 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.