如何利用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 相关文章推荐
JQuery跨Iframe选择实现代码
Aug 19 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
jquery $.trim()方法使用介绍
May 21 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
对比分析json及XML
Nov 28 Javascript
jQuery实现瀑布流的取巧做法分享
Jan 12 Javascript
js实现图片无缝滚动
Dec 23 Javascript
JavaScript实现瀑布流布局
Jun 28 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
js实现详情页放大镜效果
Oct 28 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
JavaScript 防篡改对象的用法示例
Apr 24 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
Zend公司全球首推PHP认证
2006/10/09 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
js实现秒表计时器
2019/12/16 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
python字符串,数值计算
2016/10/05 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Python类的继承和多态代码详解
2017/12/27 Python
python获取本机所有IP地址的方法
2018/12/26 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
Python pymsql模块的使用
2020/09/07 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
某科技软件测试面试题
2013/05/19 面试题
自荐信的基本格式
2014/02/22 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android