前后端分离后接口跨域怎么解决?

司徒熙晨 阅读 3

我用 Vue 写了个前端,后端是用 Express 搭的 API,本地开发时前端跑在 http://localhost:8080,后端在 http://localhost:3000,一调接口就报跨域错误。

试过在 Express 里加 CORS 中间件,但好像没生效,控制台还是提示 blocked by CORS policy。是不是我配置错了?后端代码大概长这样:

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

app.get('/api/data', (req, res) => {
  res.json({ msg: 'hello' });
});

app.listen(3000);
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
Air-冬冬
遇到跨域问题,确实挺让人头疼的,不过别担心,咱们一步一步来解决这个问题。

首先,你说你已经尝试了在 Express 中添加 CORS 中间件,但是没有生效。这可能是由于中间件的配置或者顺序不对导致的。CORS(跨域资源共享)是一种机制,它使用额外的 HTTP 头来告诉浏览器,让运行在一个源(域名)的 Web 应用被准许访问来自不同源服务器上的指定资源。

接下来,我们确保正确地安装和使用 CORS 中间件。我们可以使用 cors 这个 npm 包来处理跨域请求。

1. 首先,安装 cors 包。如果你还没有安装的话,在项目根目录下运行以下命令:
npm install cors


2. 然后,在你的 Express 应用中引入并使用这个中间件。注意,通常我们会把中间件放在所有路由定义之前,这样可以确保所有的请求都会经过这个中间件。

下面是修改后的代码示例:
const express = require('express');
const cors = require('cors'); // 引入 cors 包
const app = express();

// 使用 cors 中间件,这里需要注意的是,如果你只想允许特定来源的请求,可以在 cors() 中传入一个配置对象,比如 { origin: 'http://localhost:8080' }。
app.use(cors());

app.get('/api/data', (req, res) => {
res.json({ msg: 'hello' });
});

app.listen(3000);


这样配置之后,你的 Express 服务器就会响应预检请求,并且在响应头中添加适当的 CORS 头,允许来自 http://localhost:8080 的请求。

3. 最后,重启你的 Express 服务器,然后再次尝试从 Vue 前端发起请求。如果一切配置正确,你应该不会再看到跨域错误。

希望这些步骤能帮助你解决问题。如果还有其他疑问,尽管问我。有时候这种小问题真是磨人啊。
点赞
2026-03-25 06:04