前后端分离后接口跨域怎么解决?
我用 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);
首先,你说你已经尝试了在 Express 中添加 CORS 中间件,但是没有生效。这可能是由于中间件的配置或者顺序不对导致的。CORS(跨域资源共享)是一种机制,它使用额外的 HTTP 头来告诉浏览器,让运行在一个源(域名)的 Web 应用被准许访问来自不同源服务器上的指定资源。
接下来,我们确保正确地安装和使用 CORS 中间件。我们可以使用
cors这个 npm 包来处理跨域请求。1. 首先,安装
cors包。如果你还没有安装的话,在项目根目录下运行以下命令:2. 然后,在你的 Express 应用中引入并使用这个中间件。注意,通常我们会把中间件放在所有路由定义之前,这样可以确保所有的请求都会经过这个中间件。
下面是修改后的代码示例:
这样配置之后,你的 Express 服务器就会响应预检请求,并且在响应头中添加适当的 CORS 头,允许来自
http://localhost:8080的请求。3. 最后,重启你的 Express 服务器,然后再次尝试从 Vue 前端发起请求。如果一切配置正确,你应该不会再看到跨域错误。
希望这些步骤能帮助你解决问题。如果还有其他疑问,尽管问我。有时候这种小问题真是磨人啊。