Nodejs React CORS 策略:请求的资源上不存在“Access-Control-Allow-Origin”标头

时间:2021-06-13 23:06:26

标签: javascript node.js api express cors

我遇到了这个错误:

从源 'http://localhost:8081' 访问 XMLHttpRequest at 'http://localhost:3000/api/users/uploadAvatar' 已被 CORS 策略阻止:No 'Access-Control-Allow-Origin'请求的资源上存在标头。

当我的服务器 cors 选项是:

app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "http://localhost:8081");
  res.header("Access-Control-Allow-Credentials", "true");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
  if (req.method === 'OPTIONS') {
      res.header("Access-Control-Allow-Methods", "PUT, POST, DELETE, GET");
      return res.status(200).json({});
  } 
  next();
});

从前端我用这个选项调用服务器:

var data = {
      image: imageCrop.current.getImage().toDataURL(),
      target: targetImage,
    }
    var config = {
      onUploadProgress: function (progressEvent) {
        var percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total)
        setUploadPercent(percentCompleted)
      },
      headers: authHeader(),
      withCredentials: true,
    }
    axios.post('uploadAvatar', data ,config).then((res) => {
      setUploadPercent(0);
      if (res.status === 200) {
        cogoToast.success("upload is completed")
        setUploadModal(false);
        upDateuserInfo();
      }
    }).catch((err) => {
      setUploadPercent(0);
      setUploadModal(false);
    });

Auth 标头服务提供:

export default function authHeader() {
  const user = JSON.parse(localStorage.getItem("user"));

  if (user && user.accessToken) {
    // For Spring Boot back-end
    // return { Authorization: "Bearer " + user.accessToken };
    // for Node.js Express back-end
    return { Authorization: "Bearer " + user.accessToken};
  } else {
    return {};
  }
}

我做错了什么??请帮我!!!附言如果我删除图像参数并且无法设置“Access-Control-Allow-Origin”,“*”,则调用正在工作,因为它会给我一个使用通配符的错误。

1 个答案:

答案 0 :(得分:-1)

我已解决将此行放在 package.json 中:

"proxy": "http://localhost:3000/api/"