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會員
32內容數
李昀瑾的沙龍的其他內容
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
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
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分以上,這篇文章請千萬不要錯過,也許你的貴人就此出現! 一、避開經營陷阱,曾踩過的坑,別再重蹈! 無論新手或老手,都可能會犯錯,以為批發靠直覺,老是選擇符合自己審美的衣服,以為只要放賣場就會銷售出去,這
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News