首页 > 解决方案 > Fetch 和 postman 响应不同

问题描述

我正在写我的反应烧瓶休息网站,并遇到了一些不寻常的行为...... 因此,当我在地址域/api/users/1 处创建 get 请求时,其中 1 = postman 中已删除 db 元素的 id 我的响应包含一个空元素(如代码中所写)。但是当我在 fetch 中创建这个请求时,我得到了错误 410。我检查了代码中是否存在一个元素,但是这个响应不允许我的代码执行并且程序的所有逻辑都中断了。此外,当使用 fetch 时,有关此类请求的信息甚至不会出现在烧瓶日志中(使用 postman 时,一切都很好)。所以也许我写了很多不必要的信息,但我真的不明白哪里错了

蟒蛇代码:

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 不存在,则返回 null(适用于从未存在的 ID)

js反应代码:

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>
    </>
);

标签: reactjsapiflaskfetchflask-restful

解决方案


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

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

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

还; 我不知道您的服务器为什么或如何返回 410 GONE。如果我测试没有明确返回的路由,我会得到 200 OK 并且响应正文为“null”。涉及的代码可能比您在问题中发布的更多。


推荐阅读