📁 文件路由
Astro 使用基于文件的路由系统,pages 目录下的文件自动映射为路由:
| 文件路径 | URL |
|---|---|
| src/pages/index.astro | / |
| src/pages/about.astro | /about |
| src/pages/blog/index.astro | /blog |
| src/pages/blog/[slug].astro | /blog/:slug |
🔀 动态路由
参数路由
astro (src/pages/blog/[slug].astro)
---
const { slug } = Astro.params;
const post = await getPost(slug);
---
<h1>{post.title}</h1>
<p>{post.content}</p>
静态路径生成
astro
---
export async function getStaticPaths() {
const posts = await getAllPosts();
return posts.map(post => ({
params: { slug: post.slug },
props: { post },
}));
}
const { post } = Astro.props;
---
<h1>{post.title}</h1>
Rest 参数
astro (src/pages/[...path].astro)
---
const { path } = Astro.params;
// 匹配 /a/b/c 等
---
🔌 API 路由
typescript (src/pages/api/hello.ts)
export async function GET() {
return new Response(JSON.stringify({ message: 'Hello' }), {
headers: { 'Content-Type': 'application/json' },
});
}
export async function POST({ request }) {
const body = await request.json();
return new Response(JSON.stringify(body));
}
🔀 重定向
astro
---
return Astro.redirect('/new-page');
---