问题描述
尝试将登录详细信息发送到后端时,我在控制台中收到以下错误消息: Uncaught (in) Promise SyntaxError: Unexpected token < in JSON at position 0 asyncToGenerator.js 请查看该图像以获取错误日志。
有趣的是,甚至在fetch语句之前也会发生此错误。错误之前看到的对象是fetch调用之前的console.log()语句的结果。通过获取发送的发送对象的构造如下:
const handleSubmit = async (e) => {
e.preventDefault();
const userObj = {
method: 'POST',cache: 'no-cache',headers: {
'Accept': 'application/json','Content-Type': 'application/json'
},body: JSON.stringify({username: username,password: password})
}
const result = await Auth.login(userObj);
if (result){
window.location.reload();
} else {
setAlert(true);
}
};
Auth.login()函数如下:
const login =async (postObj) => {
console.log(postObj);
const response = await fetch('/auth/login',postObj);
const data = await response.json();
if(data.loggedin){
Cookies.set('user',data.user);
Cookies.set('isAuthenticated',true);
}
return data.loggedin;
};
抱歉,命名不一致,postObj和userObj相同。在部署一切之前,一切正常,但是一旦我构建并部署,它就会在我什至没有编写的函数中显示SyntaxError。
/ auth / login的后端功能如下:
@app.route('/auth/login',methods=['GET','POST'])
def login():
print("reached /auth/login")
username = request.json.get('username')
password = request.json.get('password')
loggedin=False; userObj = {}
if verify_password(username,password):
login_user(g.user)
loggedin =True
userObj ={"uid":g.user.id,"username": g.user.username,"email": g.user.email}
return jsonify({"loggedin":loggedin,"user":userObj})
请提出任何解决方案,谢谢!
P.S。
我在各处使用调试语句隔离了错误。我可以肯定地告诉您,即使在前端设法到达/ auth / login后端之前,也会发生此错误。该错误仅发生在获取时,并且我确定它甚至没有达到后端函数的第一行。我确定是因为我没有在日志中看到该路径,也没有打印/ auth / login函数第一行中的print语句。
解决方法
在developmet中,可以在package.json中设置代理变量,但这在生产中会失败。我没有意识到这一点,因此出现了上面的错误,前端正在其自己的目录中查找路径“ / auth / login”(将/ auth / login添加到其自己的url),并且由于页面没有返回html存在。一种解决方法是在fetch调用或setup.env文件中使用整个url,该文件包含环境变量,然后可以在fetch调用中使用。
引用-https://medium.com/better-programming/using-environment-variables-in-reactjs-9ad9c5322408