如何利用node转发请求详解


Posted in Javascript onSeptember 17, 2020

前言

本篇文章基于 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 端口,项目能够正常访问:

如何利用node转发请求详解

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();
});

最后再打开浏览器查看,大功告成,接口转发成功~

如何利用node转发请求详解

完整代码

完整代码

总结

到此这篇关于如何利用node转发请求的文章就介绍到这了,更多相关node转发请求内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
一个刚完成的layout(拖动流畅,不受iframe影响)
Aug 17 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
Dec 12 Javascript
js 限制数字 js限制输入实现代码
Dec 04 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
Aug 02 Javascript
JavaScript实现找出字符串中第一个不重复的字符
Sep 03 Javascript
jQuery中:file选择器用法实例
Jan 04 Javascript
微信小程序 数据绑定详解及实例
Oct 25 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
详解如何在vue项目中引入elementUI组件
Feb 11 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 Javascript
前端性能优化建议
Sep 17 #Javascript
JavaScript常用工具函数汇总(浏览器环境)
Sep 17 #Javascript
JavaScript中如何调用Java方法
Sep 16 #Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 #Javascript
Vue父子组件传值的一些坑
Sep 16 #Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 16 #Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 #Javascript
You might like
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
js的with语句使用方法
2007/09/21 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
python 实现删除文件或文件夹实例详解
2016/12/04 Python
python 获取网页编码方式实现代码
2017/03/11 Python
Python使用django搭建web开发环境
2017/06/09 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
python使用Matplotlib画饼图
2018/09/25 Python
python+flask实现API的方法
2018/11/21 Python
python3.5安装python3-tk详解
2019/04/26 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
Python交互式图形编程的实现
2019/07/25 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
普通话宣传标语
2014/06/26 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
贫困证明怎么写
2015/06/16 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
HTML中的表格元素介绍
2022/02/28 HTML / CSS