在Google的应用引擎上构建和部署reactjs代码后,asyncToGenerator.js中的SyntaxError

问题描述

尝试将登录详细信息发送到后端时,我在控制台中收到以下错误消息: 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