请求的资源上不存在“Access-Control-Allow-Origin”标头。节点快速获取

Posted

技术标签:

【中文标题】请求的资源上不存在“Access-Control-Allow-Origin”标头。节点快速获取【英文标题】:No 'Access-Control-Allow-Origin' header is present on the requested resource. Node Express Fetch 【发布时间】:2021-04-04 04:19:04 【问题描述】:

我知道很多人都遇到了非常相似的问题,但对他们有用的修复对我没有任何帮助。无论我做什么,我都会得到:

Access to fetch at 'http://localhost:5000/api/places/comments/test' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我正在使用带有 express 的节点,这是我的 app.js 文件(与 CORS 相关的部分):

const app = express();
app.use(bodyParser.json());
app.use((req, res, next) => 
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, DELETE, PUT"
  );
  next();
);
app.use("/api/places", placesRouter);

然后是路由文件(与不工作的路由相关)

placesRouter.post("/comments/test", requireLogin, addComment);

最后是处理程序:

  const addCommentHandler = async () => 
    try 
      const response = await fetch(
        `$process.env.REACT_APP_BACKEND_URL/api/places/comments/test`,
        
          method: "POST",
          body:  comment: formState.inputs.comment.value ,
          headers: 
            Authorization: `Bearer $auth.token`,
            "Content-Type": "application/json",
          ,
        
      );
      const responseData = await response.json();
      console.log(responseData);
     catch (e) 
  ;

我知道 body 已发送,并且我也在 Postman 中尝试过,它可以工作。

我在这里做错了什么?

【问题讨论】:

当您尝试使用 npm cors 包 npmjs.com/package/cors 来启用 CORS 时会发生什么情况? @sideshowbarker 结果相同,完全没有变化 developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/… 看看这个可能是因为某些浏览器扩展 【参考方案1】:

您正在使用res.setHeader() 而不是req.setHeader()

const app = express();
app.use((req, res, next) => 
  req.setHeader("Access-Control-Allow-Origin", "*");
  req.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"
  );
  req.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, DELETE, PUT"
  );
  next();
);
app.use(bodyParser.json());
app.use("/api/places", placesRouter);

【讨论】:

将 res 更改为 req 并没有帮助 您应该将其移至第一个中间件,将在 1 分钟内编辑我的答案

以上是关于请求的资源上不存在“Access-Control-Allow-Origin”标头。节点快速获取的主要内容,如果未能解决你的问题,请参考以下文章

django中的“请求的资源上不存在'Access-Control-Allow-Origin'标头”

如何解决请求的资源上不存在“Access-Control-Allow-Origin”标头

Http.post 请求的资源上不存在“Access-Control-Allow-Origin”标头

请求的资源发布请求上不存在“Access-Control-Allow-Origin”标头

Angular 2请求的资源上不存在“Access-Control-Allow-Origin”标头[重复]

API 请求错误 - 请求的资源上不存在“Access-Control-Allow-Origin”标头