在React 18中,当我将数据发送到Nodejs服务器时,它将发送两个请求并从服务器接收两个响应

发布于 2025-01-25 16:50:48 字数 1634 浏览 4 评论 0原文

这是用于将访问令牌发送到服务器站点的前端代码。

useEffect(() => {
        const getProducts = async () => {
            try {
                const url = `http://localhost:5000/product?email=${user.email}`
                const { data } = await axios.get(url, {
                    headers: {
                        authorization: localStorage.getItem('accessToken')
                    }
                });
                setProducts(data);
            } catch (err) {
                const status = err.response.status;
                if (status === 401 || status === 403) {
                    signOut(auth);
                    navigate('/login');
                    localStorage.removeItem('accessToken')
                    toast.error(err.response?.data?.message);
                }
            }
        }
        getProducts();
    }, [user.email]);

这是服务器网站Express代码以进行响应。为什么每次收到两个请求并发送两个回复时?

app.get('/product', verifyToken, async (req, res) => {
            const decoded = req.decoded?.email;
            const queryEmail = req.query?.email;
            if (decoded === queryEmail) {
                const query = { email: queryEmail };
                const cursor = medicineCollection.find(query);
                const products = await cursor.toArray();
                res.send(products);
            } else {
                res.status(403).send({ message: "Forbidden Access" })
            }

        })

This is the front-end code which is used for sending access token to server site.

useEffect(() => {
        const getProducts = async () => {
            try {
                const url = `http://localhost:5000/product?email=${user.email}`
                const { data } = await axios.get(url, {
                    headers: {
                        authorization: localStorage.getItem('accessToken')
                    }
                });
                setProducts(data);
            } catch (err) {
                const status = err.response.status;
                if (status === 401 || status === 403) {
                    signOut(auth);
                    navigate('/login');
                    localStorage.removeItem('accessToken')
                    toast.error(err.response?.data?.message);
                }
            }
        }
        getProducts();
    }, [user.email]);

This is server site express code for response. Why every time it is receiving two request and sending two response?

app.get('/product', verifyToken, async (req, res) => {
            const decoded = req.decoded?.email;
            const queryEmail = req.query?.email;
            if (decoded === queryEmail) {
                const query = { email: queryEmail };
                const cursor = medicineCollection.find(query);
                const products = await cursor.toArray();
                res.send(products);
            } else {
                res.status(403).send({ message: "Forbidden Access" })
            }

        })

error picture

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青瓷清茶倾城歌 2025-02-01 16:50:49

也许您将user.Email处于一种以某种方式更新的状态,因此使用效果再次调用并给您两次响应的原因。

Maybe you take user.email in a state which is updating somehow so that's why useEffect is calling again and giving you twice response.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文