如何利用node转发请求详解

前言

本篇文章基于 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 端口,项目能够正常访问:

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转发请求内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • node 文件上传接口的转发的实现

    近期的项目里使用了这样一个项目架构: 前端 -> nodejs -> java 前端负责实现业务逻辑的展示和交互 nodejs 包括维护某些数据和接口转发 java 负责维护剩下的数据 在 nodejs 的接口转发中拦截一部分接口,再对请求的方法进行区分,请求后台数据后,再进行返回.现有的接口中基本只用到了 get 和 post 两种,但是在文件上传的时候遇到了问题. node 层使用 eggjs ,一般的 post 的请求直接在 ctx.body 就能拿到请求的参数,但是 /upload 的

  • Node做中转服务器转发接口

    由于项目在做前后端分离,牵扯跨域和夸协议问题,临时抱佛脚,选择用nodejs做中转,我想应该好多人都用它.但是做普通的表单转发没啥问题,当处理附件上传转发时,各种蛋疼,已解决! 1.项目比较特殊,后台拥有两个平台,一个java一个donet,比较鸡肋,具体什么原因就不解释了. 2.当做node转发时,刚开始没有转发文件的操作,就做的很简单,用户传过来啥就,拦截到,进行转发,一切都很ok! 3.文件转发,就很麻烦.我的思路,将用户上传的文件存到node服务器.使用formidable  . 通过n

  • 教你如何用Node实现API的转发(某音乐)

    前言 你有没有过这样的经历:每当想写个项目来学习新技术的时候,却发现因为没有一套成熟的免费接口,而导致想法被扼杀摇篮.前段时间,笔者准备学一下hooks的姿势:苦于没有比较好的数据源.然后就找到了这个倒霉的咪咕音乐,并成功实现了接口转发. 本文主要用到了 Node.Express Node.Express Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Express 基于

  • shell脚本转发80端口数据包给Node.js服务器

    注意:千万不要图省事直接使用ROOT用户运行Node.js服务!这将带来无法预计的安全问题!但是使用80端口作为HTTP默认端口这一习惯是从MS时代就延续至今的,怎么办呢?网上有人滔滔不绝地说用NginX做反向代理之类的,其实我觉得没必要这么夸张,只需要使用ROOT用户做一个普通端口与80端口的数据转发就好了,使用iptables语句如下: 复制代码 代码如下: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-po

  • node跨域转发 express+http-proxy-middleware的使用

    最近公司在尝试前后端分离的开发模式,现有应用是java语言,要从中间拆除一个小的模块来做前后端分离,工具上还是jquery,只不过是流程和分工上的分离,不想在前端的机器上搭建一套java环境,就根据教程搭了一下转发,让本地可以接上开发服务器联调. 为什么要使用node代理转发? 我们要实现前后端分离,然后前端不在自己的电脑上安装tomcat,这时候,我们通过用node搭建服务器,然后转发我们的请求.例如:自己本地是localhost:3000,我们需要访问http://www.example.c

  • node.js实现端口转发

    本文为大家分享的是node.js端口转发实现代码,供大家参考,具体内容如下 #!/sbin/node var net = require('net'); function proxyPort(srcport,destServer,destport) { var server = net.createServer(function(c) { //'connection' listener c.on('end', function() { console.log('src disconnected'

  • 如何利用node转发请求详解

    前言 本篇文章基于 vue.node(koa) 需求 vue 项目开发过程中,接口跨域是一个很常见的问题.在开发时候可以用 vue 自带的 proxy 可以轻松解决.生产环境下,前端项目往往是部署在后端项目下,不会存在跨域的问题,接口前缀可以忽略. dev 环境下,请求一个产品列表接口,我们可能会这么做: https://www.baidu.com/api/product/list 生产环境下,前缀可以忽略: /api/product/list 问题来了,如果我们想在本地测试生产环境下的前端项目

  • 详解Nginx 利用代理转发请求示例

    我们米扑科技的业务遍布全球,有时国外的客户无法访问我们搭建在国内的服务,这就要求我们在国外服务器上搭建一个代理转发服务,用户请求国外服务器的域名,然后代理转发到国内,处理请求后返回结果给国外的客户.Nginx 不仅可以实现负载均衡,还可以实现反向代理转发,非常适合我们的使用场景,因此我们米扑科技采用 Nginx 利用代理转发请求实例. Nginx 利用代理转发请求实例 nginx 作为目前最流行的web服务器之一,可以很方便地实现反向代理. nginx 反向代理官方文档: NGINX REVER

  • Node.js API详解之 readline模块用法详解

    本文实例讲述了Node.js API详解之 readline模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 readline readline 模块提供了一个接口,用于从可读流(如 process.stdin)读取数据,每次读取一行. 它可以通过以下方式使用: const readline = require('readline'); readline 模块的基本用法: const readline = require('readline'); const rl = r

  • Node.js API详解之 zlib模块用法分析

    本文实例讲述了Node.js API详解之 zlib模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 zlib zlib模块提供通过 Gzip 和 Deflate/Inflate 实现的压缩功能,可以通过这样使用它: const zlib = require('zlib'); 压缩或者解压数据流(例如一个文件)通过zlib流将源数据流传输到目标流中来完成: const gzip = zlib.createGzip(); const fs = require('fs');

  • Node.js API详解之 Error模块用法实例分析

    本文实例讲述了Node.js API详解之 Error模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 Error Node.js 中运行的应用程序一般会遇到以下四类错误: 1.标准的 JavaScript 错误: EvalError : 当调用 eval() 失败时抛出. SyntaxError : 当 JavaScript 语法错误时抛出. RangeError : 当值不在预期范围内时抛出. ReferenceError : 当使用未定义的变量时抛出. TypeEr

  • Node.js API详解之 module模块用法实例分析

    本文实例讲述了Node.js API详解之 module模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 module Node.js 有一个简单的模块加载系统. 在 Node.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块). 例子,假设有一个名为 foo.js 的文件: const circle = require('./circle.js'); console.log(`半径为 4 的圆的面积是 ${circle.area(4)}`); 在第一行中,

  • Node.js API详解之 net模块实例分析

    本文实例讲述了Node.js API详解之 net模块.分享给大家供大家参考,具体如下: Node.js API详解之 net net 模块提供了创建基于流的 TCP 或 IPC 服务器(net.createServer())和客户端(net.createConnection()) 的异步网络 API. 通过以下方式引入: const net = require('net'); net.isIP(input) 说明: 测试 input 是否是 IP 地址.无效的字符串则返回 0,IPv4 地址则

  • Node.js API详解之 dns模块用法实例分析

    本文实例讲述了Node.js API详解之 dns模块用法.分享给大家供大家参考,具体如下: Node.js API详解之 dns dns (域名服务器)模块包含两类函数: 第一类函数,使用底层操作系统工具进行域名解析,且无需进行网络通信. 这类函数只有一个:dns.lookup(). 例子,查找 baidu.com: const dns = require('dns'); dns.lookup('www.baidu.com', (err, address, family) => { conso

  • Javaweb应用使用限流处理大量的并发请求详解

    在web应用中,同一时间有大量的客户端请求同时发送到服务器,例如抢购.秒杀等.这个时候如何避免将大量的请求同时发送到业务系统. 第一种方法:在容器中配置最大请求数,如果大于改请求数,则客户端阻塞.该方法有效的阻止了大量的请求同时访问业务系统,但对用户不友好. 第二种方法:使用过滤器,保证一定数量的请求能够正常访问系统,多余的请求先跳转到排队页面,由排队页面定时发起请求.过滤器实现如下: public class ServiceFilter implements Filter { private

  • Node.js API详解之 querystring用法实例分析

    本文实例讲述了Node.js API详解之 querystring用法.分享给大家供大家参考,具体如下: Node.js API详解之 querystring querystring模块提供了一些实用函数,用于解析与格式换URL查询字符串 通过 const querystring = require('querystring'); 的方式引用querystrings模块 目录: querystring.escape(str) querystring.unescape(str) querystri

随机推荐