前后端分离的项目中,前端项目本地开发的时候需要解决跨域的问题,这个时候可以通过本地启动node服务来进行接口的代理转发。现在将实现的逻辑记录一下。
主要用到的是express和http-proxy-middleware这两个模块
步骤如下:
1、初始化
npm init
2、安装模块
npm i express http-proxy-middleware --save-dev
3、proxy配置serverConfig.js
module.exports = {
/**
* port-服务启动的端口
*/
port:3300,
/**
* 代理的配置-可以设置多个代理
* @param key - 代理的匹配路径
* target-代理的目标地址
* changeOrigin-是否改变来源
* ws-是否支持socket
* pathRewrite-路径重写
*/
proxy:{
'/':{
target:"http://127.169.54.36:10881",
changeOrigin:true,
ws:true,
pathRewrite:{
"old-path":"new-path",
"/api":""
}
}
}
}
4、代理服务server.js
const express = require('express');
const proxy = require('http-proxy-middleware');
// http-proxy-middleware版本1.0.5的时候默认导出的不是proxy的函数了,需要用以下注释的方式调用
// const { createProxyMiddleware: proxy } = require('http-proxy-middleware');
const path = require('path');
const { port=8000, proxy:proxyConfig={} } = require('./serverConfig');
const app = express();
app.use('/', express.static(path.join(__dirname, 'static')))
Object.keys(proxyConfig).map(key=>{
app.use(key, proxy(proxyConfig[key]));
})
app.listen(port, ()=>{
console.log(`server is running on port ${port}`);
})
5、package.json配置
{
"name": "server",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "yby",
"license": "ISC",
"devDependencies": {
"express": "^4.17.1",
"http-proxy-middleware": "^0.19.1"
}
}
只需要npm start启动服务就可以对自己设置的接口进行代理转发。
现在把这些进行了一些简单的封装,如果只是单纯的进行接口转发,可以用npm下载 yby-package-proxy 这个包进行启动服务。详细用法可以查询 yby-package-proxy
注意:http-proxy-middleware依赖1.0.5版本中默认导出的方法跟之前用的0.19.1版本比较有所调整,第4步配置中已经注释说明,简单封装的包也已经调整过了。