You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SvelteKit中动态读取服务器本地每日更新的JSON文件?

解决SvelteKit动态读取服务器本地JSON文件的问题

你遇到的核心问题是静态导入(import)会在构建阶段缓存JSON内容,导致后续文件更新无法同步到页面。服务端路由(+page.server.js)确实可以直接访问服务器文件系统,只需改用Node.js的文件系统API动态读取即可,具体方案如下:

1. 使用Node.js文件系统模块动态读取

放弃静态import,改用fs/promises模块在load函数中实时读取文件。这样每次页面加载时,服务端都会重新读取最新的文件内容。

示例代码(+page.server.js):

import { readFile } from 'node:fs/promises';
import { join } from 'node:path';

export async function load() {
  // 拼接目标JSON文件的绝对路径,替换成你的实际文件名
  const jsonPath = join('/srv', 'daily-update.json');
  
  try {
    // 读取文件内容并解析为JSON对象
    const rawContent = await readFile(jsonPath, 'utf8');
    const latestData = JSON.parse(rawContent);
    return { latestData };
  } catch (err) {
    // 处理文件不存在、权限不足等异常
    console.error('读取JSON文件出错:', err);
    return { latestData: null, error: '数据加载失败' };
  }
}

2. 检查并设置文件权限

确保运行SvelteKit服务的进程拥有/srv目录及目标JSON文件的读取权限:

  • 通过ls -l /srv/daily-update.json查看当前权限配置
  • 若权限不足,执行chmod 644 /srv/daily-update.json(可根据实际需求调整权限值)

3. 可选:禁用文件系统缓存

如果遇到操作系统或Node.js层面的文件缓存,可以在读取时添加cache: false参数(Node.js 18及以上版本支持),强制读取最新内容:

const rawContent = await readFile(jsonPath, {
  encoding: 'utf8',
  cache: false
});

内容的提问来源于stack exchange,提问作者Arden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:22:07