// WS01 Note - Cloudflare Workers + KV 日记本应用
// 作者: WS01
// 功能: 基于Cloudflare Workers和KV数据库的简单日记本
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
const path = url.pathname;
// 处理CORS
const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
};
if (request.method === 'OPTIONS') {
return new Response(null, { status: 200, headers: corsHeaders });
}
try {
// 路由处理
if (path === '/' || path === '/login') {
return new Response(getLoginPage(), {
headers: { 'Content-Type': 'text/html; charset=utf-8', ...corsHeaders }
});
}
if (path === '/diary') {
return new Response(getDiaryPage(), {
headers: { 'Content-Type': 'text/html; charset=utf-8', ...corsHeaders }
});
}
// 查看具体日记页面
if (path.startsWith('/diary/') && path.split('/').length === 3) {
const diaryId = path.split('/')[2];
return new Response(getDiaryDetailPage(diaryId), {
headers: { 'Content-Type': 'text/html; charset=utf-8', ...corsHeaders }
});
}
// 分享日记目录页面路由
if (path === '/share') {
return new Response(getShareIndexPage(), {
headers: { 'Content-Type': 'text/html; charset=utf-8', ...corsHeaders }
});
}
// 分享页面路由
if (path.startsWith('/share/') && path.split('/').length === 3) {
const shareId = path.split('/')[2];
return new Response(getSharePage(shareId), {
headers: { 'Content-Type': 'text/html; charset=utf-8', ...corsHeaders }
});
}
if (path === '/api/auth') {
return handleAuth(request, env, corsHeaders);
}
if (path === '/api/diary') {
return handleDiaryAPI(request, env, corsHeaders);
}
// 添加分享相关API路由
if (path === '/api/diary/share' && (request.method === 'POST' || request.method === 'PUT')) {
return handleShareDiary(request, env, corsHeaders);
}
// 获取分享日记API路由
if (path.startsWith('/api/share/') && path.split('/').length === 4) {
const shareId = path.split('/')[3];
return handleGetSharedDiary(shareId, env, corsHeaders);
}
// 获取所有分享日记API路由
if (path === '/api/shares' && request.method === 'GET') {
return handleGetAllShares(request, env, corsHeaders);
}
// 获取用户分享日记列表API路由
if (path === '/api/diary/shares' && request.method === 'GET') {
return handleGetUserShares(request, env, corsHeaders);
}
// 删除分享日记API路由
if (path === '/api/diary/share' && request.method === 'DELETE') {
return handleDeleteShare(request, env, corsHeaders);
}
// 添加备份相关API路由
if (path === '/api/diary/backup' && request.method === 'POST') {
return handleCreateBackup(request, env, corsHeaders);
}
if (path === '/api/diary/backups' && request.method === 'GET') {
return handleGetBackups(request, env, corsHeaders);
}
if (path === '/api/diary/restore' && request.method === 'POST') {
return handleRestoreBackup(request, env, corsHeaders);
}
if (path === '/api/diary/backup' && request.method === 'DELETE') {
return handleDeleteBackup(request, env, corsHeaders);
}
// 404处理
return new Response('页面未找到', {
status: 404,
headers: { 'Content-Type': 'text/plain; charset=utf-8', ...corsHeaders }
});
} catch (error) {
console.error('Worker错误:', error);
return new Response('服务器内部错误', {
status: 500,
headers: { 'Content-Type': 'text/plain; charset=utf-8', ...corsHeaders }
});
}
}
};
// 登录页面
function getLoginPage() {
return `
您的私人日记本
}
// 日记页面
function getDiaryPage() {
return `