搭建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

上一篇 Next.js、Nuxt.js等服务端渲染框架构建的项目部署到服务器,并用PM2守护程序
下一篇 Vue常用的ES6语法之数据集合map
目录
文章列表
1 MySQL 排序
MySQL 排序
2
Vue 3.0 特性体验
Vue 3.0 特性体验
3
Laravel 5 缓存的使用
Laravel 5 缓存的使用
4
AWS EC2实例附加的ASG迁移操作
AWS EC2实例附加的ASG迁移操作
5
AWS Transfer Family IAM角色配置
AWS Transfer Family IAM角色配置
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。