Files
weather-api/README_zh-CN.md
EdgeOne Pages d22628f972 feat: init
2025-12-31 17:08:26 +08:00

307 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EdgeOne Pages Hono 应用程序
这是一个基于 [Hono](https://hono.dev/) 框架构建的现代 Web 应用程序,部署在 EdgeOne Pages 平台上。
在线演示https://hono.edgeone.site
## 部署
[![使用 EdgeOne Pages 部署](https://cdnstatic.tencentcs.com/edgeone/pages/deploy.svg)](https://console.cloud.tencent.com/edgeone/pages/new?template=hono)
## 🚀 项目特性
- **模块化路由设计** - 清晰的路由组织结构
- **服务端渲染** - 使用 JSX 和 HTML 模板进行页面渲染
- **文件上传** - 文件上传功能支持
- **图书管理** - 示例 CRUD 操作
- **错误处理** - 精美的 404 和 500 错误页面
- **TypeScript 支持** - 完整的类型定义
## 📁 项目结构
```
functions/
├── index.tsx # 主入口文件
├── [[default]].ts # EdgeOne Functions 默认路由
├── env.ts # 环境类型定义
├── components/ # 组件目录
│ └── Layout.tsx # 页面布局组件
└── routers/ # 路由模块
├── index.ts # 统一路由导出
├── book.tsx # 图书相关路由
├── ssr.tsx # 服务端渲染路由
└── upload.ts # 文件上传路由
```
## 🛣️ 路由详情
### 静态路由
| 路径 | 方法 | 描述 |
|------|------|------|
| `/` | GET | 静态首页,从 public 目录提供 `index.html` |
**示例:**
- `https://hono.edgeone.app/` - 静态首页
### SSR 路由 (`/ssr`)
| 路径 | 方法 | 描述 |
|------|------|------|
| `/ssr/:name` | GET | 动态 SSR 页面,显示个性化欢迎消息 |
**示例:**
- `https://hono.edgeone.app/ssr/john` - 显示 "Hello john!" 页面
### 图书管理路由 (`/book`)
| 路径 | 方法 | 描述 |
|------|------|------|
| `/book` | GET | 获取所有图书列表页面 |
| `/book/:id` | GET | 获取特定图书详情页面 |
| `/book` | POST | 创建新图书API 端点) |
**示例:**
- `https://hono.edgeone.app/book` - 图书列表
- `https://hono.edgeone.app/book/1` - 第一本书的详情
**创建图书 API 请求示例:**
```bash
curl -X POST https://hono.edgeone.app/book \
-H "Content-Type: application/json" \
-d '{
"title": "新书标题",
"author": "作者姓名"
}'
```
**支持的功能:**
- CORS 跨域支持
### 文件上传路由 (`/upload`)
| 路径 | 方法 | 描述 |
|------|------|------|
| `/upload` | POST | 文件上传端点 |
**示例:**
```bash
curl -X POST https://hono.edgeone.app/upload \
-F "file=@example.txt"
```
## 📖 详细 API 文档
### 基本信息
- **Base URL**: `https://hono.edgeone.app`
- **Content-Type**: `application/json`
- **编码**: UTF-8
### API 详情
#### 1. 文件上传
**端点**: `POST /upload`
**描述**: 上传文件到服务器
**请求格式**: `multipart/form-data`
**请求参数**:
- `file` (必需): 要上传的文件
**curl 请求示例**:
```bash
# 上传文本文件
curl -X POST https://hono.edgeone.app/upload \
-F "file=@/path/to/your/file.txt"
# 上传图片文件
curl -X POST https://hono.edgeone.app/upload \
-F "file=@/path/to/image.jpg"
# 上传并自定义文件名
curl -X POST https://hono.edgeone.app/upload \
-F "file=@document.pdf;filename=my-document.pdf"
```
**响应示例**:
```json
{
"success": true,
"message": "文件上传成功",
"fileName": "file.txt"
}
```
**错误响应**:
```json
{
"success": false,
"message": "未提供文件"
}
```
#### 2. 创建图书
**端点**: `POST /book`
**描述**: 创建新的图书记录
**请求参数**:
```json
{
"title": "图书标题",
"author": "作者姓名"
}
```
**参数说明**:
- `title` (可选): 图书标题,默认为 "Untitled"
- `author` (可选): 作者姓名,默认为 "Unknown"
**curl 请求示例**:
```bash
# 创建包含完整信息的图书
curl -X POST https://hono.edgeone.app/book \
-H "Content-Type: application/json" \
-d '{
"title": "红楼梦",
"author": "曹雪芹"
}'
# 只创建标题的图书
curl -X POST https://hono.edgeone.app/book \
-H "Content-Type: application/json" \
-d '{
"title": "新书标题"
}'
# 创建空图书(使用默认值)
curl -X POST https://hono.edgeone.app/book \
-H "Content-Type: application/json" \
-d '{}'
```
**响应示例**:
```json
{
"success": true,
"message": "图书创建成功",
"book": {
"id": "abc123def",
"title": "图书标题",
"author": "作者姓名",
"createdAt": "2023-12-01T10:00:00.000Z"
}
}
```
#### 3. 获取图书信息
**curl 请求示例**:
```bash
# 获取所有图书列表
curl -X GET https://hono.edgeone.app/book
# 获取特定图书详情
curl -X GET https://hono.edgeone.app/book/1
# 获取个人页面
curl -X GET https://hono.edgeone.app/john
```
### 错误码说明
| 错误码 | HTTP 状态码 | 描述 |
|-----------|-------------|------|
| `VALIDATION_ERROR` | 400 | 请求参数验证失败 |
| `FILE_UPLOAD_ERROR` | 400 | 文件上传失败 |
| `NOT_FOUND` | 404 | 资源未找到 |
| `INTERNAL_ERROR` | 500 | 内部服务器错误 |
### 频率限制
- 目前所有 API 端点均无频率限制
- 建议客户端进行请求频率控制
### CORS 支持
所有 API 端点均支持跨域访问,响应头包含:
- `Access-Control-Allow-Origin: *`
- `Access-Control-Allow-Methods: POST, GET, OPTIONS`
- `Access-Control-Allow-Headers: Content-Type, Authorization`
## 🔧 开发
### 本地开发
```bash
# 安装依赖
npm install
# 启动开发服务器
edgeone pages dev
```
## 🌐 环境变量
项目使用以下环境变量和全局对象:
- `my_kv` - KV 存储实例,用于数据持久化
## 🛡️ 安全特性
### IP 限制(可选)
项目包含 IP 限制中间件配置(默认注释),可以限制访问来源:
```typescript
app.use('*', ipRestriction(/* 配置 */));
```
## 📝 API 响应格式
### 成功响应
```json
{
"success": true,
"message": "操作成功",
"data": {}
}
```
### 错误响应
```json
{
"error": "ERROR_CODE",
"message": "错误描述"
}
```
## 🎨 UI 设计
项目采用现代化 UI 设计:
- 响应式布局
- 系统字体栈
- 卡片式设计
- 统一色彩主题
- 优雅的错误页面
## 📦 依赖
- **hono** - Web 框架
- **@edgeone/ef-types** - EdgeOne Functions 类型定义
- **edgeone** - EdgeOne CLI 工具
## 🤝 贡献
欢迎提交 Issues 和 Pull Requests 来改进这个项目。
## <20><> 许可证
MIT License