老实说,我是个新手,在填写详细信息后尝试提交注册表单时,我不断收到错误“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 }),
});
如果在获取请求时出现“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);
}
};