将nodo服务器做成代理服务器
第一种:使用http模块
// /data/api/xxxxx ---> http://yuanjin.tech:5100/api/xxxx
const http = require("http");
module.exports = (req, res, next) => {
const context = "/data";
if (!req.path.startsWith(context)) {
//不需要代理
next();
return;
}
// 需要代理
// 此时请求的代理服务器地址为:http://127.0.0.1:9000/data/api/...
// 数据服务器的接口为 http://yuanjin.tech:5100/api/...
// 将客户端发送的过来的请求地址修改后去请求数据服务器
const path = req.path.substr(context.length);
// 创建代理请求对象 request
const request = http.request(
{
host: "yuanjin.tech",
port: 5100,
path: path,
method: req.method,
headers: req.headers,
},
(response) => {
// 代理响应对象 response
res.status(response.statusCode);
for (const key in response.headers) {
res.setHeader(key, response.headers[key]);
}
response.pipe(res);
}
);
req.pipe(request); //把请求体写入到代理请求对象的请求体中
};
第二种使用插件
插件名:http-proxy-middleware
文档:https://github.com/chimurai/http-proxy-middleware#install
vueCLI 使用也是和这个插件实现代理如图:
const { createProxyMiddleware } = require("http-proxy-middleware");
const context = "/data";
module.exports = createProxyMiddleware(context, {
target: "http://yuanjin.tech:5100",
pathRewrite: function (path, req) {
// 此时请求的代理服务器地址为:http://127.0.0.1:9000/data/api/...
// 数据服务器的接口为 http://yuanjin.tech:5100/api/...
// 将客户端发送的过来的请求地址修改后去请求数据服务器
return path.substr(context.length);
},
});