Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';无法使用Express API找到CORS错误的原因_Node.js_Cors - Fatal编程技术网

Node.js Can';无法使用Express API找到CORS错误的原因

Node.js Can';无法使用Express API找到CORS错误的原因,node.js,cors,Node.js,Cors,我有一个静态网站,我正在添加一个简单的点击跟踪器。这是来自网站的JS: function addHit() { let options = { method: "POST", body: JSON.stringify({}), }; fetch("https://myapi.com/hit", options); } window.onload = addHit; 此请求到达Express服务器: const express = require("express"

我有一个静态网站,我正在添加一个简单的点击跟踪器。这是来自网站的JS:

function addHit() {
  let options = {
    method: "POST",
    body: JSON.stringify({}),
  };
  fetch("https://myapi.com/hit", options);
}

window.onload = addHit;
此请求到达Express服务器:

const express = require("express");
const app = express();
const cors = require("cors");

app.use(
  cors({
    origin: "https://www.mywebsite.com",
  })
);

app.get("/", (req, res) => {
  // code rendering hits so I can see them...
});

app.post("/hit", (req, res) => {
  // code updating hits in database
  // returns res.status(200) on success
  // returns res.status(400) on failure
});

let port = process.env.PORT;
if (port == null || port == "") {
  port = 8000;
}
const listener = app.listen(port, function () {
  console.log("Your app is listening on port " + listener.address().port);
});
当我打开我的网页时,点击次数按预期更新。但30秒后,我在控制台中发现两个错误

“跨源请求被阻止:同一源策略不允许在读取远程资源。(原因:CORS标头“访问控制允许源”丢失)。”

“TypeError:尝试获取资源时出现NetworkError。”

Access Control Allow Origin标头应由
cors
包添加,如果请求确实被阻止,则不应更新命中计数

如果您对可能导致这种情况的原因有任何意见,我们将不胜感激。如果需要更多的代码,我很乐意添加它,但是删除静态站点的一个发布片段会清除所有错误。

这样做的目的是限制通过的源访问

  app.use(
  cors({
    origin: "https://www.mywebsite.com",
  })
);
相反,你想做的是

虽然如果您正在使用CORS库,您可以 我们使用这个代码段,包处理其余部分


应用程序使用(cors())

如果有其他人遇到这种情况,那么问题根本与CORS无关。api路由中的return语句放错了位置,导致请求超时。很奇怪,控制台中的错误是关于CORS的,但事实是…

您尝试过http吗?不是https?可能是您的问题与HttpSt有关谢谢您的建议,但仍然是相同的错误。我也尝试了该片段(即使它允许从任何网站进行不受限制的访问),但错误仍然是相同的。请查看我编辑的答案谢谢您的建议,但尝试后,错误仍然是相同的。好的,很高兴帮助您查看。你也可以分享,如果这有帮助或你找到了它
    app.use(cors(credentials: true));
    app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Credentials", true);
    res.header("Access-Control-Allow-Methods", "GET,POST");
    res.header(
    "Access-Control-Allow-Headers",
     "X-Requested-With, X-HTTP-Method-Override, Content-        Type, Accept"
  );

     let allowedOrigins = [
    "http://your app.com", ..add more ];
  const origin = req.headers.origin;
  if (allowedOrigins.includes(origin)) {
    res.setHeader("Access-Control-Allow-Origin", origin);
  }

     if (req.method === "OPTIONS") {
      res.sendStatus(200);
     } else {
      next();
     }
     });