如何利用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 相关文章推荐
js调用webservice中的方法实现思路及代码
Feb 25 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
Nov 30 Javascript
js读取json的两种常用方法示例介绍
Oct 19 Javascript
Bootstrap Paginator分页插件使用方法详解
May 30 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
Mar 22 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
Apr 30 Javascript
Vue SSR 即时编译技术的实现
May 06 Javascript
JS实现页面鼠标点击出现图片特效
Aug 19 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
JavaScript版代码高亮
2006/06/26 Javascript
一段好玩的JavaScript代码
2006/12/01 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
js实现表格数据搜索
2020/08/09 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
python 解析html之BeautifulSoup
2009/07/07 Python
python读写文件操作示例程序
2013/12/02 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
python实现手势识别的示例(入门)
2020/04/15 Python
英国网上电器商店:Electricshop
2020/03/15 全球购物
50岁生日感言
2014/01/23 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
工程技术员岗位职责
2014/03/02 职场文书
群众路线党课主持词
2014/04/01 职场文书
服务承诺书格式
2014/05/21 职场文书
班主任自我评价范文
2015/03/11 职场文书
我爱我班主题班会
2015/08/13 职场文书
追悼会答谢词范文
2015/09/29 职场文书