如何利用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控制显示隐藏兼容问题(IE6、IE7、IE8)
Apr 01 Javascript
getComputedStyle与currentStyle获取样式(style/class)
Mar 19 Javascript
javascript标签在页面中的位置探讨
Apr 11 Javascript
js弹出窗口之弹出层的小例子
Jun 17 Javascript
通过js简单实现将一个文本内容转译成加密文本
Oct 22 Javascript
jQuery实现定位滚动条位置
Aug 05 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
对vue v-if v-else-if v-else 的简单使用详解
Sep 29 Javascript
世界上最短的数字判断js代码
Sep 09 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
Sep 18 Javascript
JS写滑稽笑脸运动效果
May 28 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&java(三)
2006/10/09 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
php分页函数完整实例代码
2014/09/22 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
CSS3 动画卡顿性能优化的完美解决方案
2018/09/20 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
青年文明号复核材料
2014/02/11 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang