如何利用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几个验证函数代码
Mar 25 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
Aug 14 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
常用的几段javascript代码分享
Mar 25 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
May 14 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 Javascript
微信小程序进行微信支付的步骤昂述
Dec 01 Javascript
JavaScript获取select中text值的方法
Feb 13 Javascript
AngularJS service之select下拉菜单效果
Jul 28 Javascript
React.Js添加与删除onScroll事件的方法详解
Nov 03 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
九年级数学教学反思
2014/02/02 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
python基础之//、/与%的区别详解
2022/06/10 Python