如何利用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 相关文章推荐
LazyLoad 延迟加载(按需加载)
May 31 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
JavaScript实现相册弹窗功能(zepto.js)
Jun 21 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
Feb 21 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
Apr 28 Javascript
JavaScript你不知道的一些数组方法
Aug 18 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
Vue路由前后端设计总结
Aug 06 Javascript
js实现的订阅发布者模式简单示例
Mar 14 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
Jul 20 Javascript
JavaScript 判断数据类型的4种方法
Sep 11 Javascript
mustache.js实现首页元件动态渲染的示例代码
Dec 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
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
PHP会话处理的10个函数
2015/08/11 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
jquery实现动态操作select选中
2015/02/11 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
python复制文件的方法实例详解
2015/05/22 Python
Python松散正则表达式用法分析
2016/04/29 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
Python实现全排列的打印
2018/08/18 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
入党自我鉴定范文
2013/10/04 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
MySQL Server 层四个日志
2022/03/31 MySQL