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

Flatiron School项目配置useContext全局用户状态时遇JSON语法错误

解决useContext全局状态中出现的‘Unexpected end of JSON input’错误

这个错误是因为res.json()尝试解析空内容或者非JSON格式的响应导致的,结合你的代码,核心问题出在fetch('/me')的响应处理环节,下面是具体的修复方案:

错误根源

  1. 后端接口/me返回了空内容(比如状态码204 No Content)
  2. 后端返回的不是合法JSON格式(比如错误时返回HTML页面)
  3. 请求失败(比如401未授权、500服务器错误)但未处理错误状态,直接尝试解析JSON

修复步骤

1. 给fetch添加完整的错误处理逻辑

在解析JSON前先校验响应状态,同时捕获Promise异常,避免出现Unhandled Rejection:

import React, { useState, useEffect } from "react";

const UserContext = React.createContext();

function UserProvider({ children }) {
  const [user, setUser] = useState({})

  useEffect(() => {
    fetch('/me')
      .then(res => {
        // 先判断请求是否成功
        if (!res.ok) {
          throw new Error(`请求状态异常:${res.status}`);
        }
        return res.json();
      })
      .then(data => {
        setUser(data);
      })
      .catch(err => {
        console.error('获取用户信息失败:', err);
        // 可根据业务需求处理,比如设置空用户或跳转登录页
        setUser({});
      });
  }, []);

  return (
    <UserContext.Provider value={{user}}>
      {children}
    </UserContext.Provider>
  );
}

export { UserContext, UserProvider };

2. 排查后端接口的响应内容

打开浏览器开发者工具(F12)的「Network」标签,找到/me请求,查看:

  • 状态码:如果是401/404/500,说明后端接口逻辑存在问题(比如未登录时未正确返回对应内容)
  • Response内容:确认返回的是合法JSON,而非空文本、HTML错误页

3. 处理后端返回空内容的场景

如果后端在用户未登录时会返回204状态码(无内容),可以单独处理这种情况:

useEffect(() => {
  fetch('/me')
    .then(res => {
      if (res.status === 204) {
        // 后端返回空,直接返回空对象作为默认值
        return {};
      } else if (!res.ok) {
        throw new Error(`请求状态异常:${res.status}`);
      }
      return res.json();
    })
    .then(data => setUser(data))
    .catch(err => {
      console.error('获取用户信息失败:', err);
      setUser({});
    });
}, []);

额外提示

  • 开发时务必给Promise添加catch处理,避免控制台抛出Unhandled Rejection错误
  • 如果需要区分「未登录」和「请求失败」,可以把user初始状态设为null,在对应逻辑中设置不同状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:02:51