吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2316|回复: 5
收起左侧

[其他转载] 前端使用node服务器+http-proxy-middleware中间件解决跨域问题

[复制链接]
1997mhy 发表于 2021-11-25 11:36
var express = require('express'); //express中间件,用来快速的创建一个node服务器。
var cors = require('cors');//用来解决跨域的中间件
const { createProxyMiddleware } = require('http-proxy-middleware');//用来代{过}{滤}理请求的中间件
var app = express();

//设置跨域访问1 start
/* 为什么在这里还需要解决跨域?这个node服务不就是使用代{过}{滤}理中间件来解决跨域的吗?原因:虽然此node服务请求代{过}{滤}理的服务器,不会跨域,
  但是当你写的页面的接口请求这个node服务器的时候也会跨域,所有需要先解决页请求到此node的跨域问题。
        如果是vue或者react项目的话,webpack就可以直接进行配置代{过}{滤}理服务器,不用这么麻烦。
  */
app.all('*', function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
        res.header("X-Powered-By",' 3.2.1');
        res.header("Content-Type", "application/json;charset=utf-8");
        next();
});
//设置跨域访问1 end

//设置跨域访问2 statrt,和设置跨域访问1功能好像一样
//  app.use(cors())
//设置跨域访问2 end

app.use((request,response,next)=>{
        console.log('有人请求服务器1了');
        console.log('请求来自于',request.get('Host'));
        console.log('请求的地址',request.url);
        next()
})

app.get('/students',(request,response)=>{ //用node写的普通接口
        const students = [
                {id:'001',name:'tom',age:18},
                {id:'002',name:'jerry',age:19},
                {id:'003',name:'tony',age:120},
        ]
        response.send(students)
})
/***************************** 开始启动反向代{过}{滤}理start1 **********************************/
const options = {
    target: 'http://10.0.3.88', // target host
    changeOrigin: true, // needed for virtual hosted sites
    ws: true, // proxy websockets
    pathRewrite: {
    //   '^/api/old-path': '/api/new-path', // rewrite path
    //   '^/api/remove/path': '/path', // remove base path
    '^/mhy': '',//把接口/mhy开头的/mhy替换为空。
    },
  };
  // create the proxy (without context)
  const exampleProxy = createProxyMiddleware(options);
  // mount `exampleProxy` in web server
  app.use('/mhy', exampleProxy); //请求接口以/mhy开头的路径需要进行代{过}{滤}理。
/***************************** 开始启动反向代{过}{滤}理end1 **********************************/


/***************************** 开始启动反向代{过}{滤}理start2 只是写法不同。 **********************************/

// app.use('/', createProxyMiddleware({
//     // 代{过}{滤}理跨域目标接口
//     target: 'http://10.0.3.88',
//     changeOrigin: true,

//     // 修改响应头信息,实现跨域并允许带cookie
//     onProxyRes: function(proxyRes, req, res) {
//         res.header('Access-Control-Allow-Origin', 'http://10.0.3.88'); //设置是否允许跨域访问,*代表所有地址都可以跨域访问
//         res.header('Access-Control-Allow-Credentials', 'true');
//     },

//     // 修改响应信息中的cookie域名
//     cookieDomainRewrite: 'http://10.0.3.88'  // 可以为false,表示不修改
// }));

/***************************** 开始启动反向代{过}{滤}理end2 **********************************/
app.listen(3000); //监听端口
console.log('服务器启动成功,端口在3000');

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
HappyCrazy + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

51shares 发表于 2021-11-25 12:17
谢谢,学习了
Thshy 发表于 2021-11-25 16:00
no1314 发表于 2021-12-10 13:09
52HHY 发表于 2021-12-10 19:35

感谢楼主的分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表