egg.js解决跨域问题

跨域出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port);

报错信息:

在这里插入图片描述
即是说不能发送跨域请求。由8000端口到7001端口。

解决方案:

一般解决跨域问题都是由后端解决。一般上线的项目有nginx来解决,但是在windows上解决跨域问题可以使用插件,如果是egg.js项目可以使用egg-cors插件

egg-cors的使用:

安装插件

npm i install egg-cors --save//安装依赖

config/plugin.js中添加配置

 cors: {
        enable: true,
        package: 'egg-cors'
  }

config/config.default.js中添加:

 //解决跨域
  config.cors = {
     origin: 'http://127.0.0.1:8080',//允许的端口和地址
     allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',//允许的请求方式
     credentials:true//允许前端带cookie
  };

在前端的请求中axios的配置中加入x下面代码来保证客户端可以带cookie去请求后端数据。

axios.defaults.withCredentials = true;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 可以通过设置响应头的方式来解决跨域问题。以下是一个使用 Node.js 解决跨域问题的示例代码: ```javascript const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { // 设置响应头,允许所有来源访问 res.setHeader('Access-Control-Allow-Origin', '*'); // 设置响应头,允许跨域访问的方法 res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); // 设置响应头,允许跨域访问的请求头 res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); if (req.method === 'OPTIONS') { // 如果是预检请求,直接返回成功状态码 res.statusCode = 204; res.end(); } else { // 正常请求,返回数据 res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ message: 'Hello, World!' })); } }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); ``` 在这个示例中,我们设置了响应头中的 `Access-Control-Allow-Origin` 字段为 `*`,表示允许所有来源访问。同时,我们还设置了 `Access-Control-Allow-Methods` 字段为 `GET, POST, PUT, DELETE`,表示允许跨域访问的方法。最后,我们还设置了 `Access-Control-Allow-Headers` 字段为 `Content-Type`,表示允许跨域访问的请求头。 需要注意的是,在处理跨域请求时,浏览器会先发送一个预检请求(OPTIONS 请求),来确定服务器是否允许跨域访问。因此,我们在代码中需要判断请求是否为预检请求,并在预检请求时直接返回成功状态码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值