使用 CORS 与 LocomotiveJs 一起休息 API。适用于本地机器,但不适用于 Amazon 或 Heroku

Posted

技术标签:

【中文标题】使用 CORS 与 LocomotiveJs 一起休息 API。适用于本地机器,但不适用于 Amazon 或 Heroku【英文标题】:Rest API with LocomotiveJs using CORS. Works on local machine but not on Amazon or Heroku 【发布时间】:2014-03-04 03:30:56 【问题描述】:

使用 CORS 和 LocomotiveJs 的 Rest API。适用于本地机器,但不适用于 Amazon 或 Heroku

我使用 LocomotiveJs 做了一个 REST api,现在我正在尝试在其上启用 CORS。 我将以下代码添加到我的“所有”环境 (config/environments/all.js)。

this.use(function crossOrigin(req,res,next)
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With,Authentication");
    res.header("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS");

    return next();
);

它可以在我的本地机器上运行,但是当我将它部署到 Heroku 或 AWS 时,客户端发送 OPTIONS 命令时出现 404 Http 错误。

为了隔离问题,我开发了一个简单的 Express 应用,代码如下:

var express = require('express');
var app = express();

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

app.get('/test', function(req, res)
    res.set('Content-Type', 'application/json');
    res.send( 'Hello' : 'World' );
);

var port = process.env.PORT || 5000;

app.listen(port);
console.log('Listening on port ' + port);

并且此代码在部署到 Heroku 时有效!

你们对为什么它在我的本地机器上工作而在服务器上不工作有任何意见吗?

【问题讨论】:

【参考方案1】:

我找到了解决办法:

现在我正在使用这个连接中间件:https://github.com/troygoode/node-cors

然后我只是更改了我的 all.js 文件,添加了以下行:

this.use(cors());

我将它部署在 Heroku 上,现在可以使用了。

【讨论】:

以上是关于使用 CORS 与 LocomotiveJs 一起休息 API。适用于本地机器,但不适用于 Amazon 或 Heroku的主要内容,如果未能解决你的问题,请参考以下文章

无法让 CORS 与 Web API 2 一起使用

如何将 Breeze IQueryable 与 CORS 一起使用?

如何将 ActiveMQ AJAX servlet 与 CORS 一起使用?

将 CORS 标头与 CSS 背景图像一起使用

将 Laravel Echo 与 docker 一起使用(CORS 问题)

为啥 Laravel 中间件 CORS 不能与 Vue.js 一起使用