当前位置: 首页 > 知识库问答 >
问题:

客户端使用Vue.js,服务器端使用Express时的“访问-控制-允许-起源”CORS问题

滕祯
2023-03-14

我试图使用Vue.js和Axios调用我在Jazz上的API,但是我得到了以下错误:

CORS策略阻止从来源“http://jazz.api.com/api/extra_stuff_here”访问“https://jazz.api.com/api/extra_stuff_here”的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“access-control-allog-origin”标头。

我一直在研究其他解决方案,如https://enable-cors.org/server_expressjs.html或添加

"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Allow-Credentials": "true"

我的代码仍然不起作用。即使我为Access-Control-Allow-Origin做了通配符,我仍然会遇到CORS问题,无法调用我的API。我在客户端使用Vue和Typescript,并设法让Express在服务器端工作。下面是我的Axios API调用的代码片段:

return Axios.post('https://jazz.api.com/api/extra_stuff_here', context.getters.getRequest,
        {
          headers: {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "OPTIONS",
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
            "Access-Control-Allow-Credentials": "true"
          }
        }
      )

这就是我在这个TypeScript文件中调用API的地方,这里是我的server.js:

var express = require('express');
var path = require('path');
var cors = require('cors');
var bodyParser = require('body-parser');
var morgan = require('morgan');

var app = express();
app.use(morgan('dev'));
app.use(cors());
app.use(bodyParser.json());

var publicRoot = './dist';

//app.use(express.static(path.join(__dirname, '/dist')));
app.use(express.static(publicRoot));

app.get('/', function (req, res) {
    res.sendFile("index.html", { root: publicRoot });
});

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Authorization");
    res.header("Content-Type", "application/json");
    res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
    res.header("Access-Control-Allow-Credentials", "true");
    next();
}); 

app.listen(process.env.PORT || 80, function() {
    console.log("listening on port 80");
});

不管我怎么做,我都搞不清楚这个CORS问题。在我将express添加到我的应用程序之前,我仍然遇到了同样的问题,认为服务器端的express可能会解决CORS问题。然而,这并没有帮助。在此之前,我通过执行npm运行服务来运行我的Vue应用程序。但任何帮助都会很好!这可能是爵士乐的问题吗?

共有1个答案

顾正初
2023-03-14

您已经添加了cors中间件,但还没有为选项请求启用它

app.options('*', cors())

尝试向服务器添加类似的内容以启用它。您可以在express文档中进一步阅读https://expressjs.com/en/resources/middleware/cors.html

 类似资料:
  • 我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS):http://localhost:8080/ API(Laravel样板文件):http://localhost:8000/ api_routes.php:

  • 问题内容: 我试图使CORS请求正常工作。使用以下JS代码,我得到此错误: 这是JS代码: 当我使用chrome的devtools查看网络时,我发现确实没有标题。但是,当我手动加载该网站时,它就存在了! 我使用以下代码设置标题: 希望能有所帮助! 问题答案: 它说这意味着您的服务器应用程序需要调整以接受跨源请求。由于安全原因,默认情况下跨源请求不起作用。您需要启用它们。 对于django,有一个维

  • 问题内容: 我尝试使用以下代码通过$ http(角度)发送http请求: 但这不起作用,并且我在Web控制台中有此错误: 你有解决方案吗 ? 问题答案: 您看到此错误是由于在浏览器中实现的称为Same Origin Policy的安全机制所致。 基本上,这是由于您的网页尝试访问驻留在与网页本身不同的主机,端口或方案(HTTP / HTTPS /文件等)所在的服务器上的资源而引起的。 为了解决此问题

  • 我正在创建一个脚本,加载在其他网站的外部。它加载CSS和HTML,在我自己的服务器上工作得很好。 但还是不管用。

  • 我在vHost中设置了。 但是现在我遇到了这样一个错误: CORS策略阻止从来源'http://localhost:3000'访问xxx处的XMLHttpRequest:'Access-Control-Allow-Origin'标头包含多个值'http://localhost:3000,*',但只允许一个值。 你知道怎么回事吗?是服务器端的问题还是我应该在axios配置中设置一些东西? 谢了。

  • 我有错误: XMLHttpRequest 无法加载 http://localhost:5984/cp_config/。当凭据标志为 true 时,不能在“访问控制-允许-源”标头中使用通配符“*”。因此,不允许访问源“http://localhost”。XMLHttpRequest 的凭据模式由 withCredentials 属性控制。 但我有一个标题: 我该如何解决这个问题?