【问题标题】:Node: CORS Fails Occasionally节点:CORS 偶尔失败
【发布时间】:2015-01-25 06:08:22
【问题描述】:

我有一个节点应用程序,服务器托管在 heroku 上。我所有的请求都成功了,直到我发送了大约 10 或 15 个。然后我开始收到 CORS 错误。知道为什么会发生这种情况吗?

试一试。 http://danielrasmuson.github.io/

这是我的“CORS 启用代码”。目前我正在尝试一些事情。

var app = express();
app.use(cors());

app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

【问题讨论】:

  • 当您从浏览器收到 CORS 错误时,您是否检查了来自服务器的 http 标头? Chrome 调试器中的网络选项卡将说明一切。
  • 加载资源失败:服务器响应状态为 503(服务不可用)(索引):1 XMLHttpRequest 无法加载aqueous-temple-8608.herokuapp.com/pills。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'danielrasmuson.github.io' 不允许访问。响应的 HTTP 状态代码为 503。

标签: node.js heroku http-status-code-503


【解决方案1】:

我已经为此苦苦挣扎了一段时间。我会收到 CORS 错误...有时,在对同一个 API 执行相同的请求时。

devtools 中的网络选项卡提到了缺少 CORS 来源或其他与 CORS 相关的错误,因此这可能会误导您检查您的 CORS 设置。

但是,详细的服务器日志表明这不是 CORS 问题。问题来自服务器在请求之后返回的错误。

就我而言,服务器发送的错误产生了CORS相关的问题,但这些CORS问题并不是这里的核心问题。

总而言之,可以访问详细的服务器日志,并查看您如何处理服务器响应中的错误(例如您从请求正文中读取的未定义值等错误...)

如果我理解正确的话,上面的@Błażej Grzeliński 由于服务器响应中的错误管理错误而遇到了同样的问题。

【讨论】:

    【解决方案2】:

    我不知道现在是否为时已晚,但也许这会有所帮助: 这段代码我也遇到了同样的问题:(偶尔我会遇到 503 heroku 错误的 cors erros)

    router.post('/create', function (req, res, next) {
        password(req.body.user_password).hash(function (error, hash) {
            if (error)
                throw new Error('Something went wrong!' + error)
    
            console.log(req.body);
            req.body.user_password = hash;
            User.create(req.body, function (err, post) {
                if (err) return next(err);
                console.log(post);
                res.json(post);
            });
        });
    
    });
    

    当我把它改成:

    router.post('/create', function (req, res, next) {
        password(req.body.user_password).hash(function (error, hash) {
            if (error) {
                throw new Error('Something went wrong!' + error);
            } else {
                req.body.user_password = hash;
                User.create(req.body, function (err, post) {
                    if (err) {
                        throw new Error('Something went wrong!' + err);
                    } else {
                        res.json(post);
                    }
                });
            }
        });
    
    });
    

    不再偶尔出现失败的代码和错误。

    最后似乎是节点应用程序而不是heroku的问题。

    干杯 布拉泽杰

    【讨论】:

    • 感谢@Błażej Grzeliński。我认为你是对的,如果你没有正确处理异常,你可能会遇到这个错误。
    猜你喜欢
    • 2020-05-02
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2010-09-29
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多