如何利用node转发请求详解
前言
本篇文章基于 vue、node(koa)
需求
vue 项目开发过程中,接口跨域是一个很常见的问题。在开发时候可以用 vue 自带的 proxy 可以轻松解决。生产环境下,前端项目往往是部署在后端项目下,不会存在跨域的问题,接口前缀可以忽略。
dev 环境下,请求一个产品列表接口,我们可能会这么做:
https://www.baidu.com/api/product/list
生产环境下,前缀可以忽略:
/api/product/list
问题来了,如果我们想在本地测试生产环境下的前端项目,会存在跨域的问题;发给后端部署项目又太麻烦,修改代价太大。我们可以自己部署一个简易的 node 服务,来部署自己的前端项目~
实现
0. 安装依赖
npm i koa --save-dev npm i koa-static --save-dev npm i koa-mount --save-dev npm i http-proxy-middleware --save-dev npm i koa2-connect --save-dev
1. koa 搭建简易服务端
引入 koa,然后监听端口
const Koa = require('koa');
const Koa = require('koa');
const path = require('path');
const app = new Koa();;
const port = process.env.PORT || 3000;
app.listen(port, () => {
 console.log(` Your application is running here: http://localhost:${port}`);
});开放 dist(即打包出来的目录)
const koaStatic = require('koa-static');
const koaMount = require('koa-mount');
// 开放目录
app.use(koaMount('/', koaStatic(resolve('../dist'))));这样差不多就完成了,跑服务然后打开 3000 端口,项目能够正常访问:

2. 转发接口请求
项目是能正常请求了,可是还需要处理接口问题,即 node 当成中间件,转发前端接口请求到真正的后端接口
const { createProxyMiddleware } = require('http-proxy-middleware');
const k2c = require('koa2-connect');
app.use(async (ctx, next) => {
 const url = ctx.path;
 if (url.startsWith('/api')) {
 ctx.respond = false;
 await k2c(
  createProxyMiddleware({
  target: # 后端的接口地址,
  changeOrigin: true,
  secure: false,
  }),
 )(ctx, next);
 }
 return await next();
});最后再打开浏览器查看,大功告成,接口转发成功~

完整代码
总结
相关推荐
  lzccheng    2020-09-06  
   boneix    2020-10-21  
   seanzed    2020-10-15  
   ifconfig    2020-10-14  
   学留痕    2020-09-20  
   kka    2020-09-14  
   redis    2020-09-07  
   soyo    2020-08-31  
   stonerkuang    2020-08-18  
   LxyPython    2020-08-17  
   raksmart0    2020-08-17  
   Lzs    2020-08-14  
   MrHaoNan    2020-07-31  
   80530895    2020-07-05  
   lengyu0    2020-06-28  
   YarnSup    2020-06-28  
   huanglianhuabj00    2020-06-27  
   woaishanguosha    2020-06-27  
 