当前位置: 首页 > news >正文

使用nodeJs的express+axios+cors做代理

使用nodeJs的express+axios+cors做代理

前端在请求后端时通常会遇到跨域cors问题,如果只在本地开发可以通过webpack或vite的proxy设置。但如果需要在线上或者其他地方绕过跨域,可以使用代理的方法。

1. 创建文件夹

并创建以下文件
package.json

{"name": "proxy","version": "1.0.0","description": "","main": "proxy.js","scripts": {"start": "node index.js","start:pm2": "pm2 start index.js --name your-app-name"},"author": "","license": "ISC","dependencies": {"axios": "^1.8.4","cors": "^2.8.5","express": "^3.5.3"}
}

index.js

const express = require("express");
const axios = require("axios");
const cors = require("cors");// 创建 Express 应用
const app = express();// 使用中间件解析 JSON 和 URL 编码的请求体
app.use(express.json());
app.use(express.urlencoded({ extended: true }));// 使用 CORS 中间件,允许跨域请求,并设置 credentials 为 true
app.use(cors({origin: function (origin, callback) {// 允许所有来源的请求callback(null, true);},credentials: true, // 允许携带凭证})
);// 目标地址
const TARGET_URL = "https://www.baidu.com/apis";// 代理路由
app.use("/apis", async (req, res) => {try {// 获取客户端请求的路径和查询参数const path = req.path;const queryParams = req.query;// 构造目标 URLconst targetUrl = `${TARGET_URL}${path}`;// 转发请求到目标地址const response = await axios({method: req.method,url: targetUrl,params: queryParams,headers: {...req.headers,host: new URL(TARGET_URL).host, // 替换 Host 头为目标地址的主机名},data: req.body, // 如果是 POST/PUT 请求,转发请求体});// 将目标服务器的响应返回给客户端res.status(response.status).send(response.data);} catch (error) {// 处理错误if (error.response) {// 如果目标服务器返回了错误响应res.status(error.response.status).send(error.response.data);} else {// 其他错误res.status(500).send({ error: "Proxy request failed" });}}
});// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {console.log(`Proxy server is running on port ${PORT}`);
});

2. 执行npm i

3. 执行

提供node或PM2两种执行方式

  • npm run start
  • npm run start:pm2

之后所有访问 http://localhost:3000/apis的请求将被代理到https://www.baidu.com/apis;具体可以自行配置

4. 部署线上 node 方式

  1. 打开宝塔->软件商店->安装node.
    在这里插入图片描述

  2. 创建一个文件夹,并将下面三个文件放上去在这里插入图片描述

  3. 点击终端,执行npm i

  4. 创建一个node项目,配置启动命令和端口
    在这里插入图片描述
    启动成功后访问宝塔IP:3000/apis将会被代理到https://www.baidu.com/apis

4. 部署线上 pm2 方式

  1. 打开宝塔->软件商店->PM2管理器
    在这里插入图片描述
  2. 同上
  3. 同上
  4. 配置pm2
    在这里插入图片描述
    启动成功后访问宝塔IP:3000/apis将会被代理到https://www.baidu.com/apis

相关文章:

  • 配置MambaIRv2: Attentive State Space Restoration的环境
  • Sql刷题日志(day5)
  • 说一下Redis的发布订阅模型和PipeLine
  • OpenBayes 一周速览|EasyControl 高效控制 DiT 架构,助力吉卜力风图像一键生成;TripoSG 单图秒变高保真 3D 模型
  • leetcode hot100尝试1
  • 零基础入门 Verilog VHDL:在线仿真与 FPGA 实战全流程指南
  • 鸿蒙中的并发线程间通信、线程间通信对象
  • 状态模式(State Pattern)详解
  • Python | 分层线性模型的实现及示例
  • 什么是鸿蒙南向开发?什么是北向开发?
  • PHP 反序列化原生类 TIPS字符串逃逸CVE 绕过漏洞属性类型特征
  • 集结号海螺捕鱼游戏源码解析(第二篇):水浒传捕鱼模块逻辑与服务器帧同步详解
  • 2025山东省职业院校技能大赛网络安全赛项样题
  • node.js 实战——(path模块 知识点学习)
  • 解决重装idea后破解jerbel的问题
  • (一)单机架构、应用数据分离架构、应用服务集群架构
  • JavaScript学习教程,从入门到精通,Ajax与Node.js Web服务器开发全面指南(24)
  • 基于javaweb的SpringBoot扶农助农平台管理系统设计与实现(源码+文档+部署讲解)
  • 前端面试场景题
  • JVM学习笔记
  • 刺激视网膜可让人“看”到全新颜色
  • 福建一改造项目1人高处坠亡且事故迟报41天,住建厅约谈相关责任单位
  • 十二届上海市委第六轮巡视启动,对18家市管单位开展常规巡视
  • 著名水声学家陆佶人逝世,曾参加我国第一代核潜艇主动声纳研制
  • “何以中国·闽山闽水物华新”网络主题宣传活动在福建武夷山启动
  • 国家税务总局镇江市税务局原纪检组组长朱永凯接受审查调查