提交注册表单时,我不断收到“Unexpected end of JSON input”错误

问题描述 投票:0回答:1

老实说,我是个新手,在填写详细信息后尝试提交注册表单时,我不断收到错误“JSON 输入意外结束”,并且在我的节点终端上显示:

11:58:50 PM [vite] http proxy error: /api/auth/signup
AggregateError [ECONNREFUSED]:
    at internalConnectMultiple (node:net:1116:18)    
    at afterConnectMultiple (node:net:1683:7)

这是代码块:

import { useState } from "react";
import toast from "react-hot-toast";
import { useAuthContext } from "../context/AuthContext";

const useSignup = () => {
    const [loading, setLoading] = useState(false);
    const { setAuthUser } = useAuthContext();

    const signup = async ({ fullName, username, password, confirmPassword, gender }) => {
        const success = handleInputErrors({ fullName, username, password, confirmPassword, gender });
        if (!success) return;

        setLoading(true);
        try {
            const res = await fetch("/api/auth/signup", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ fullName, username, password, confirmPassword, gender }),
            });

            const data = await res.json();
            if (data.error) {
                throw new Error(data.error);
            }
            localStorage.setItem("chat-user", JSON.stringify(data));
            setAuthUser(data);
        } catch (error) {
            toast.error(error.message);
        } finally {
            setLoading(false);
        }
    };

    return { loading, signup };
};
export default useSignup;

function handleInputErrors({ fullName, username, password, confirmPassword, gender }) {
    if (!fullName || !username || !password || !confirmPassword || !gender) {
        toast.error("Please fill in all fields");
        return false;
    }

    if (password !== confirmPassword) {
        toast.error("Passwords do not match");
        return false;
    }

    if (password.length < 6) {
        toast.error("Password must be at least 6 characters");
        return false;
    }

    return true;
}

希望尽快得到答复,谢谢!

编辑:我的浏览器上的控制台显示错误发生在第 15 行,位于以下部分:

try {
            const res = await fetch("/api/auth/signup", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ fullName, username, password, confirmPassword, gender }),
            });

enter image description here

reactjs vite
1个回答
0
投票

如果在获取请求时出现“Unexpected end of JSON input”错误,则表明服务器响应可能为空或不是预期的 JSON 格式。要处理此问题,您可以修改代码以捕获此特定错误并进行相应处理。

const 注册 = async ({ 全名, 用户名, 密码, 确认密码, 性别 }) => { const success = handleInputErrors({ 全名, 用户名, 密码, 确认密码, 性别 }); 如果(!成功)返回;

setLoading(true);
try {
    const res = await fetch("/api/auth/signup", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ fullName, username, password, confirmPassword, gender }),
    });

    // Check if response is empty
    if (res.status === 204) {
        throw new Error("Empty response from the server");
    }

    const data = await res.json();

    if (data.error) {
        throw new Error(data.error);
    }

    localStorage.setItem("chat-user", JSON.stringify(data));
    setAuthUser(data);
} catch (error) {
    // If response is empty, handle it
    if (error instanceof SyntaxError && error.message === "Unexpected end of JSON input") {
        toast.error("Server response is empty or not in JSON format");
    } else {
        toast.error(error.message);
    }
} finally {
    setLoading(false);
}

};

© www.soinside.com 2019 - 2024. All rights reserved.