טיפ Hono שימו לב לנתיבים שלא מסתיימים בלוכסן
את הקוד הבא לקחתי מתוך התיעוד של hono כדי להגיש קבצים סטטיים:
app.use('/client/*', serveStatic({ root: './'}));
אם ניגשים לנתיב /client/foo.js
יוגש הקובץ foo.js מתוך תיקיית client. אם ניגשים ל /client/index.html
יוגש הקובץ index.html
ואם ניגשים לנתיב /client/
יוגש גם כן הקובץ index.html
כצפוי.
אבל מה קורה אם ניגשים ל /client
(בלי לוכסן בסוף)? הונו מנסה ללכת לקראתנו ואוטומטית מגיש שוב את תוכן הקובץ index.html
. הבעיה היא שה URL נשאר בלי הלוכסן, ולכן אם index.html כולל הפניה לקובץ אחר ההפניה תהיה יחסית ל /
ולא יחסית ל /client
. לדוגמה נניח שבתוך index.html
מופיעה השורה:
<link rel="stylesheet" href="style.css" />
גישה לאתר דרך הנתיב /client/
מחזירה את תוכן הקובץ index.html
. בגלל שהנתיב מסתיים ב /
הדפדפן מנסה לקבל את קובץ העיצוב מהנתיב /client/style.css
והכל עובד. לעומת זאת גישה לאתר דרך /client
עדיין מחזירה את תוכן הקובץ index.html
, אבל הפעם בגלל שהתיקייה האחרונה בנתיב היא התיקייה הראשית /
הדפדפן ינסה לטעון את /style.css
בלי התחילית client
, ייכשל והעיצוב לא יוצג.
פיתרון מהיר הוא להוסיף הפניה מ /client
ל /client/
עם הקוד הזה:
app.get('/client', (c) => {
return c.redirect('/client/', 301); // Permanent redirect
});
app.use('/client/*', serveStatic({ root: './'}));
ואם אתם מכירים פיתרונות אחרים אל תתביישו לשתף בתגובות.