Fetch 和 postman 响应不同

Fetch and postman response are different

我正在编写我的 React Flask-rest 网站,遇到了异常行为……某事。因此,当我在地址 domain/api/users/1 创建一个获取请求时,其中 1 = 邮递员中已删除 db 元素的 id 我的响应包含一个空元素(如代码中所写)。但是当我在 fetch 中创建这个请求时,我得到了错误 410。我检查了代码中是否存在一个元素,但是这个响应不允许我的代码执行并且程序的所有逻辑都中断了。此外,使用 fetch 时,有关此类请求的信息甚至不会出现在 flask 日志中(使用 postman 时,一切正常)。所以可能我写了很多不必要的信息,但我真的不明白哪里错了

python代码:

def get(self, id):
    u = User.query.filter_by(id=id).first()
    if u:
        return {
            'id': u.id,
            'username': u.username,
            'email': u.email}

如果 id 不存在 return null(使用不存在的 ID)

js-react 代码:

const [user, setUser] = useState({});

useEffect(() => {
    fetch(`/api/users/${match.params.id}`)
        .then((res) => res.json())
        .then((data) => setUser(data))

    // eslint-disable-next-line react-hooks/exhaustive-deps
}, []);

if (!user) {
    return <h1>Same user dont exists</h1>;
}

return (
    <>
        <h1 className="mb-3">{user.username}</h1>
        <div>{user.email}</div>
    </>
);

不确定这是否能解决您的问题,但您可以尝试添加一个 else: 块以防用户 ID 不存在和 return 一个空字典

def get(self, id):
    u = User.query.filter_by(id=id).first()
    if u:
        return {
            'id': u.id,
            'username': u.username,
            'email': u.email}
    else:
        return {}
        # alternatively:
        # return {"message": "User does not exist"}, 404

我不知道为什么这对您有效,但对另一种无效,但似乎根本不 returning 任何东西都可能会破坏您的代码。或者,return如果用户不存在则404 not found,根据状态码单独处理。

还有;我不知道您的服务器 return 为何或如何出现 410 错误。如果我测试没有显式 return 的路由,我会得到 200 OK 并且响应主体为“null”。所涉及的代码可能比您在问题中发布的代码更多。