Astro - 基礎入門6.第六課練習題實作

更新 發佈閱讀 6 分鐘

題目

任務目標:完成一個具有「保護機制」的開發者專區。

  1. 在 src/pages/ 下建立一個 admin.astro 頁面。
  2. 在 src/middleware.ts 中撰寫邏輯:如果使用者訪問 /admin 且 URL 參數沒有包含 ?pass=123,就將其重定向到首頁。
  3. 提示:使用 context.url.searchParams.get('pass')
  4. 性能檢查:執行 npm run build。觀察終端機輸出的檔案大小,看看 Astro 是如何 將你的 React 組件和 Markdown 打包成極小的檔案。
  5. 最終挑戰:將這個專案成功部署到網路上,並把網址分享給朋友。

目前專案結構

📁 .astro/
📁 .vscode/
📁 node_modules/
📁 public/
└─ favicon.svg
📁 src/
├─ 📁 actions/
│ └─ index.ts
├─ 📁 components/
│ ├─ DescriptionControl.jsx
│ ├─ LikeButton.jsx
│ ├─ PostsQuote.astro
│ ├─ RandomQuote.astro
│ └─ ServerTime.astro
├─ 📁 content/
│ ├─ 📁 blog/
│ │ └─ post-1.md
│ └─ config.ts
├─ 📁 layouts/
│ └─ BaseLayout.astro
└─ 📁 pages/
│ ├─ 📁 posts/
│ │ └─ [id].astro
│ ├─ about.astro
│ ├─ blog.astro
│ └─ index.astro
└─ middleware.ts
.env
.gitignore
astro.config.mjs
package-lock.json
package.json
README.md
tscon

1_新增 src/pages/admin.astro

---

import BaseLayout from '../layouts/BaseLayout.astro'
const pageTitle = '後臺管理'
---

<BaseLayout pageTitle={pageTitle}>
  <h2>還沒想到要放什麼</h2>
</BaseLayout>

2_修改 src/middleware.ts

import { defineMiddleware } from "astro:middleware";

export const onRequest = defineMiddleware(async (context, next) => {
  console.log(`有人訪問了:${context.url.pathname}`);

  if (context.url.pathname.startsWith('/admin')) {
    const pass = context.url.searchParams.get('pass');
    if (pass != "123") {
      // 如果沒有登入,就跳轉回首頁
      return context.redirect('/');
    }
  }

  // 繼續執行後續的請求
  const response = await next();
  return response;
});

3_修改 src/layouts/BaseLayout.astro

  1. nav 增加 admin 連結
  2. 自訂 admin 連結動作 (不知道這題是不是這樣做)
...(省略)
<body class={_bodyClass}>
    <nav>
      <a href="/">首頁</a>
      <a href="/about">關於我</a>
      <a href="/blog">部落格</a>
      <a href="/admin" id="navAdminHref">後臺管理</a>
    </nav>

    <h1>{pageTitle}</h1>

    <slot />

    <footer>
      <hr />
      <p>© 2024 我的 Astro 學習筆記</p>
    </footer>

    <script>
      const navAdminHref = document.getElementById('navAdminHref')
      navAdminHref!.addEventListener('click', (e) => {
        e.preventDefault()
        console.log('點擊 Admin', e)
        const password = prompt('請輸入密碼')
        location.href = '/admin?' + `pass=${password}`
      })
    </script>

  </body>
...(省略)
留言
avatar-img
李昀瑾的沙龍
0會員
25內容數
李昀瑾的沙龍的其他內容
2026/01/13
第六課:中間件 (Middleware) 與生產部署 (Deployment) 核心觀念:Middleware 是什麼? 中間件是站在「請求 (Request)」與「頁面 (Page)」之間的一道關卡。每當有人點擊你的網站,中間件會先執行。這非常適合用來處理:身份驗證、重定向 ...
2026/01/13
第六課:中間件 (Middleware) 與生產部署 (Deployment) 核心觀念:Middleware 是什麼? 中間件是站在「請求 (Request)」與「頁面 (Page)」之間的一道關卡。每當有人點擊你的網站,中間件會先執行。這非常適合用來處理:身份驗證、重定向 ...
2026/01/12
Astro - 基礎入門5.第五課練習題實作
2026/01/12
Astro - 基礎入門5.第五課練習題實作
2026/01/12
第五課:Astro Actions —— 安全、簡單的伺服器通訊 核心觀念:Actions 是什麼? 前你需要寫一個 src/pages/api/login.ts,然後在前端寫 fetch('/api/login', { method: 'POST', ... })。 在 Astro 5 中,
Thumbnail
2026/01/12
第五課:Astro Actions —— 安全、簡單的伺服器通訊 核心觀念:Actions 是什麼? 前你需要寫一個 src/pages/api/login.ts,然後在前端寫 fetch('/api/login', { method: 'POST', ... })。 在 Astro 5 中,
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
市場經驗拉長之後,很多投資人都會遇到同一個問題:不是方向看錯,而是部位太集中個股,常常跟大趨勢脫節。 早年的台股環境,中小股非常吃香,反而權值股不動,但QE量化寬鬆後,特別是疫情之後,後疫情時代,鈔票大量在股市走動,這些大資金只能往權值股走,因此早年小P的策略偏向中小型個股,但近年AI興起,高技術
Thumbnail
市場經驗拉長之後,很多投資人都會遇到同一個問題:不是方向看錯,而是部位太集中個股,常常跟大趨勢脫節。 早年的台股環境,中小股非常吃香,反而權值股不動,但QE量化寬鬆後,特別是疫情之後,後疫情時代,鈔票大量在股市走動,這些大資金只能往權值股走,因此早年小P的策略偏向中小型個股,但近年AI興起,高技術
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
Alphabet 於 2025/12/22(台北 12/23) 宣布以約 47.5 億美元收購潔淨能源開發商 Intersect,目的是補足 AI 資料中心快速擴張所需的電力與基礎設施。這筆交易顯示,AI 算力競賽已延伸到電力、電網與建置速度,能源正式成為科技巨頭的核心戰場之一。
Thumbnail
Alphabet 於 2025/12/22(台北 12/23) 宣布以約 47.5 億美元收購潔淨能源開發商 Intersect,目的是補足 AI 資料中心快速擴張所需的電力與基礎設施。這筆交易顯示,AI 算力競賽已延伸到電力、電網與建置速度,能源正式成為科技巨頭的核心戰場之一。
Thumbnail
A²IoT(AI + Android-based IoT)透過 Headless Android、OTA 更新與 MQTT 通訊,成功解決傳統 IoT 的碎片化與維運困難問題,廣泛應用於預知維護、智慧電表、車聯網、精準農業與智慧城市等領域,已具實證基礎,不易泡沫化。
Thumbnail
A²IoT(AI + Android-based IoT)透過 Headless Android、OTA 更新與 MQTT 通訊,成功解決傳統 IoT 的碎片化與維運困難問題,廣泛應用於預知維護、智慧電表、車聯網、精準農業與智慧城市等領域,已具實證基礎,不易泡沫化。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
想開服飾店圓夢,又想賺大錢長久經營,請回答下列10問題,如果和你想法符合,得1分!如果總分>3分以上,這篇文章請千萬不要錯過,也許你的貴人就此出現! 一、避開經營陷阱,曾踩過的坑,別再重蹈! 無論新手或老手,都可能會犯錯,以為批發靠直覺,老是選擇符合自己審美的衣服,以為只要放賣場就會銷售出去,這
Thumbnail
想開服飾店圓夢,又想賺大錢長久經營,請回答下列10問題,如果和你想法符合,得1分!如果總分>3分以上,這篇文章請千萬不要錯過,也許你的貴人就此出現! 一、避開經營陷阱,曾踩過的坑,別再重蹈! 無論新手或老手,都可能會犯錯,以為批發靠直覺,老是選擇符合自己審美的衣服,以為只要放賣場就會銷售出去,這
Thumbnail
在現代數位時代,網站開發成為一門藝術,具有無限的創造力和潛力。透過網站,我們能夠創造出一個豐富、互動且具有影響力的數位世界。網站設計師和開發者通過他們的技術和創意,能夠釋放出數位世界的力量,讓人們獲得無盡的資訊和體驗。 網站開發涉及多個層面,包括設計、程式編寫、內容編輯和使用者體驗等。設計師以他們
Thumbnail
在現代數位時代,網站開發成為一門藝術,具有無限的創造力和潛力。透過網站,我們能夠創造出一個豐富、互動且具有影響力的數位世界。網站設計師和開發者通過他們的技術和創意,能夠釋放出數位世界的力量,讓人們獲得無盡的資訊和體驗。 網站開發涉及多個層面,包括設計、程式編寫、內容編輯和使用者體驗等。設計師以他們
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News