搭建nodejs代理服务器解决跨域问题

初始化项目

npm init -y

创建目录 view 和文件 app.js,view目录下存放项目文件,app.js用来启动本地服务和配置本地代理

安装依赖

安装相关依赖,只需要两个依赖包,express是Web开发框架,http-proxy-middleware就是代理库

npm install express http-proxy-middleware connect-history-api-fallback connect-timeout path yarn -S

配置代理

编写app.js,示例如下:

// 导入express,路径包,子进程中的异步进程,代理,设置项目根目录
const express = require('express')
const path = require('path')
const {exec} = require("child_process")
const proxyMiddleWare = require("http-proxy-middleware")
const root = path.join(__dirname, './view')

// 生成express实例,配置代理,启动服务
const app = express();
// 配置代理设置项HOST为目标服务器(即API服务器),PORT为启动服务端口
const { HOST = 'http://192.168.16.28:8080/', PORT = '8899' } = {}
const proxyOption ={target:HOST, changeOrigoin:true}
app.set('port', PORT);
// 设置根目录为静态资源
app.use('/', express.static(root))
// 使用反向代理
app.use("/api", proxyMiddleWare(proxyOption))
// 启动服务
app.listen(app.get('port'), () => {
    let url = `http://localhost:${app.get('port')}`
    // 自动打开默认浏览器
    switch (process.platform) {
        case "darwin":
            exec(`open ${url}`);
        case "win32":
            exec(`start ${url}`);
        default:
            exec(`open ${url}`);
    }
})
var express = require("express");
var path = require("path");
const timeout = require("connect-timeout");
const proxy = require("http-proxy-middleware");
var app = express();

// 这里从环境变量读取配置,方便命令行启动
// HOST 指目标地址(即API服务器)
// PORT 服务端口
const { HOST = "http://127.0.0.1:8080", PORT = "2020" } = process.env;

// 反向代理(这里把需要进行反代的路径配置到这里即可)
// eg:将/api/test 代理到 ${HOST}/api/test
// proxy 中间件的选择项

var apiProxy = proxy("/api", {
  target: HOST,
  pathRewrite: { "^/api": "" },
  secure: false,
  changeOrigin: true
});

app.use(apiProxy);

// 超时时间
const TIME_OUT = 30 * 1e3;
// 设置超时 返回超时响应
app.use(timeout(TIME_OUT));
app.use((req, res, next) => {
  if (!req.timedout) next();
});

app.use(require("connect-history-api-fallback")());

// appblog为项目目录
app.use(express.static(path.resolve(__dirname, "appblog")));

app.get("*", function(req, res) {
  if (req.originalUrl.indexOf("favicon.ico")) {
    res.sendFile(path.resolve(__dirname, "dist", "favicon.ico"));
  }
});

// 设置端口
app.set("port", PORT);

app.listen(app.get("port"), function() {
  console.log(`server running @${app.get("port")}`);
});

启动代理

在根文件夹内打开控制台启动项目node ./app.js

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/12/build-nodejs-proxy-server-to-solve-cross-domain-problems/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
搭建nodejs代理服务器解决跨域问题
初始化项目 npm init -y 创建目录 view 和文件 app.js,view目录下存放项目文件,app.js用来启动本地服务和配置本地代理 安装依赖 安装相关依赖,只需要两个……
<<上一篇
下一篇>>
文章目录
关闭
目 录