如何在SvelteKit中读写文本文件存储API响应?
在SvelteKit中实现基于文件存储的API路由
你可以通过SvelteKit的**服务器路由(Server Routes)**实现需求,不用数据库,直接用Node.js的文件系统API读写JSON文件,构建后无需额外配置。以下是具体实现步骤:
1. 创建API路由文件
在src/routes下新建api/data/+server.js,这个文件会处理/api/data路径的GET和POST请求。
2. 编写路由逻辑
以下是完整的代码实现,包含文件读写、请求处理和错误捕获:
import { json } from '@sveltejs/kit'; import fs from 'fs/promises'; import path from 'path'; // 定义数据文件的绝对路径 const dataDir = path.join(process.cwd(), 'data'); const dataFile = path.join(dataDir, 'latest.json'); // 处理GET请求:返回保存的最新JSON数据 export async function GET() { try { const content = await fs.readFile(dataFile, 'utf8'); return json(JSON.parse(content)); } catch (err) { // 文件不存在时返回空对象 if (err.code === 'ENOENT') { return json({}, { status: 200 }); } // 其他读取错误返回500状态码 return json({ error: '读取数据失败' }, { status: 500 }); } } // 处理POST请求:保存传入的JSON数据,覆盖旧数据 export async function POST({ request }) { try { const payload = await request.json(); // 确保data目录存在(不存在则自动创建) await fs.mkdir(dataDir, { recursive: true }); // 将数据写入文件,格式化JSON便于查看 await fs.writeFile(dataFile, JSON.stringify(payload, null, 2)); return json({ success: true }, { status: 201 }); } catch (err) { return json({ error: '保存数据失败' }, { status: 500 }); } }
3. 关键说明
- 路径处理:用
process.cwd()获取项目根目录,结合path模块生成绝对路径,避免相对路径在部署环境中出错。 - 目录创建:
fs.mkdir的recursive: true参数会自动创建不存在的父目录,无需手动创建data文件夹。 - 错误处理:针对文件不存在的情况做了特殊处理,返回空对象而非错误;其他读写错误返回500状态码,方便排查问题。
- 部署兼容性:SvelteKit构建后会将服务器路由编译为Node.js可执行代码,这种文件操作逻辑完全兼容Node.js部署环境,无需额外定制。
4. 额外注意事项
- 将
data/目录添加到.gitignore,避免提交测试或生产数据到版本库。 - 确保部署服务器的Node.js进程拥有
data/目录的读写权限。 - 如果是多实例部署(如集群模式),文件存储可能存在并发写入冲突,若请求量较大,建议改用单实例或轻量数据库(如SQLite)。
内容的提问来源于stack exchange,提问作者lia07
相关产品推荐
相关产品推荐

