【发布时间】:2021-09-13 11:29:53
【问题描述】:
我有一个带有 NodeJS/Express 后端和 VueJS 前端的项目。我面临的问题是我不断收到 CORS 错误:
跨源请求被阻止:同源策略不允许读取位于 https://localhost:8080/api/plot 的远程资源。 (原因:CORS 请求未成功)。
我已经在我的 NodeJS 后端的 index.js 文件中添加了 CORS 中间件:
const express = require('express');
const app = express();
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header(
'Access-Control-Allow-Headers',
'Authorization, X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Request-Method',
);
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
res.header('Allow', 'GET, POST, OPTIONS, PUT, DELETE');
next();
});
我也尝试过不同的方法:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
在 Vue 项目中,我已将代理添加到我的 vue.config.js 文件中:
module.exports = {
devServer: {
port: 8080,
proxy: {
'^/api': {
target: 'http://localhost:3000',
changeOrigin: true,
secure: false,
pathRewrite: { '^/api': '/api' },
logLevel: 'debug',
},
},
},
};
然后我将 API 调用的 URL 更改为发布 8080:
import axios from 'axios';
export const addPlot = async (plot) => {
const url = `https://localhost:8080/api/plot`;
return await axios.post(url, plot).then((res) => {
console.log(res);
});
};
【问题讨论】:
-
您的开发服务器似乎在
http://localhost:8080/上运行,并且您正在向 HTTP 端点发送 HTTPS 请求。 -
@MichalLevý 请求被发送到 8080 的原因是因为代理。这会将发送到 3000 的所有流量重定向到端口 8080。这通常可以修复 CORS 错误。
-
我知道。但是端口 8080 是 HTTP(无 SSL),您正在使用 HTTPS 进行 Axios 调用 ....
-
@MichalLevý 非常感谢!这解决了问题!
标签: javascript node.js vue.js express cors