代理服务器.jpg

将nodo服务器做成代理服务器

第一种:使用http模块

  1. // /data/api/xxxxx ---> http://yuanjin.tech:5100/api/xxxx
  2. const http = require("http");
  3. module.exports = (req, res, next) => {
  4. const context = "/data";
  5. if (!req.path.startsWith(context)) {
  6. //不需要代理
  7. next();
  8. return;
  9. }
  10. // 需要代理
  11. // 此时请求的代理服务器地址为:http://127.0.0.1:9000/data/api/...
  12. // 数据服务器的接口为 http://yuanjin.tech:5100/api/...
  13. // 将客户端发送的过来的请求地址修改后去请求数据服务器
  14. const path = req.path.substr(context.length);
  15. // 创建代理请求对象 request
  16. const request = http.request(
  17. {
  18. host: "yuanjin.tech",
  19. port: 5100,
  20. path: path,
  21. method: req.method,
  22. headers: req.headers,
  23. },
  24. (response) => {
  25. // 代理响应对象 response
  26. res.status(response.statusCode);
  27. for (const key in response.headers) {
  28. res.setHeader(key, response.headers[key]);
  29. }
  30. response.pipe(res);
  31. }
  32. );
  33. req.pipe(request); //把请求体写入到代理请求对象的请求体中
  34. };

第二种使用插件

插件名:http-proxy-middleware
文档:https://github.com/chimurai/http-proxy-middleware#install
vueCLI 使用也是和这个插件实现代理如图:
image.png

  1. const { createProxyMiddleware } = require("http-proxy-middleware");
  2. const context = "/data";
  3. module.exports = createProxyMiddleware(context, {
  4. target: "http://yuanjin.tech:5100",
  5. pathRewrite: function (path, req) {
  6. // 此时请求的代理服务器地址为:http://127.0.0.1:9000/data/api/...
  7. // 数据服务器的接口为 http://yuanjin.tech:5100/api/...
  8. // 将客户端发送的过来的请求地址修改后去请求数据服务器
  9. return path.substr(context.length);
  10. },
  11. });