当前位置: 首页 > 后端技术 > Node.js

前端代理服务器的搭建与使用

时间:2023-04-03 15:01:08 Node.js

1、背景介绍:目前流行的前后端分离项目,一般都是在不同的域名下。在前后端开发过程中,分别部署在不同的服务器上,会出现跨域的情况,部署上线的时候基本没有这个需求,所以搭建了前端代理服务方便开发。作为后端,需要了解前端的服务结构和基本运行流程。本文主要从前端的角度使用React搭建一个简单的测试项目,在自己搭建的代理服务下实现一个简单的微信分享demo。二、项目基本结构前端测试项目`wechat-app`节点代理服务`proxy-server`后端接口服务`wechat-server`三、构建步骤:3.1.创建React项目创建步骤:(默认机器已经安装node环境和npm包管理工具)1.安装React项目创建工具:npminstall-gcreate-react-app2.创建项目:create-react-appwechat-share3.切换到项目:cdwechat-share4.删除src目录下的所有文件,新建index.js文件5.安装开发必要的工具包初始化:npminit安装react和react-dom:npminstall--savereactreact-dom安装axios(http请求工具)npminstall--saveaxios安装微信jssdknpminstall--saveweixin-js-sdk安装es6环境npminstall--save-devbabel-clinpminstallbabel-core--savenpminstall--savebabel-polyfill3.2inindex.js前端代码写在:分享基本流程:1.配置微信公众号2.写后端服务,以及前端从后端接口获取微信配置参数(后端逻辑参考文档实现)3.初始配置4.检查js分享接口权限5.从后端微信分享配置,初始化微信分享事件导入从“反应”反应;从'react-dom'导入ReactDOM;从'w导入wxeixin-js-sdk';从“axios”导入axios;让wxConfig={};让shareConfig={};functiongetData(response){if(response.status===200){varresData=response.data;返回资源数据;}else{console.log('responseiserror:',response);返回{};}}functiongetWxConfig(){returnaxios.post('share/mobile/getWXConfig',{'url':window.location.href}).then(function(response){varresData=getData(response);if(resData.status&&resData.status===1){returnresData.data;}elseif(resData.data&&resData.data.message){alert(resData.data.message);return{};}}).catch(函数(err){console.log(err);});}functiongetShareConfig(){returnaxios.post('/share/mobile/getShareInfo',{}).then(函数(响应){varresData=getDat一个回应);如果(resData.status&&resData.status===1){返回resData.data;}elseif(resData.data&&resData.data.message){警报(resData.data.message);返回{};}}).catch(function(err){console.log(err);});}asyncfunctioninit(){wxConfig=awaitgetWxConfig();shareConfig=awaitgetShareConfig();wx.config({debug:true,//开启debug模式,所有API调用的返回值都会显示在客户端alert上,如果想查看传入的参数,可以在PC端打开,参数信息会通过log,只会在PC端打印appId:wxConfig.appId,//必填,公众号的唯一标识timestamp:wxConfig.timestamp,//必填,生成签名的时间戳nonceStr:wxConfig.noncestr,//必填,签名生成的随机字符串:wxConfig.signature,//必填,签名,见附件一jsApiList:['onMenuShareAppMessage','onMenuShareQQ','onMenuShareTimeline']//必填,需要使用的JS接口列表,所有JS接口列表见附件2});wx.checkJsApi({jsApiList:['onMenuShareAppMessage','onMenuShareQQ','onMenuShareTimeline'],//需要检查的JS接口列表,所有JS接口列表见附录2,success:function(res){console.log('checkJsApiinitsuccess!')}});wx.ready(function(){wx.onMenuShareAppMessage({title:shareConfig.title,//分享标题link:shareConfig.link,//分享链接,链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl:shareConfig.imgUrl,//分享图标success:function(){console.log('分享成功!')},});})}init();classRequestClassextendsReact.Component{render(){return(

Hello,World

)}};ReactDOM.render(,文档t.getElementById('root'));3.3.现在搭建代理服务proxy-server,在src目录下新建proxy文件夹,编写代理服务器代码1.node层代理后端serverIp:serverPort/api下的所有服务,对外开放7080端口world,所有请求代理服务器7080端口的服务都会转发到后端服务器2.在React项目的package.json文件中配置了代理服务器地址,所有接口请求都会通过7080端口转发到后端服务器后端。Step1、编写代理服务“usestrict”;constexpress=require('express');constpath=require('path');constapp=express();constrequest=require('request');//配置静态文件服务中间件letserverUrl='http://serverIp:serverPort/api/';//服务器地址app.use(express.static(path.join(__dirname,'./')));//静态资源index.html和node代码在一个目录下app.use('/',function(req,res){leturl=serverUrl+req.url;console.log("requesturl==>",url);req.pipe(request(url)).pipe(res);});//本地服务代理在7080端口app.listen(7080,'127.0.0.1',function(){console.log('proxyserver正在端口7080');});step2运行。启动代理服务:nodestartproxy-server.jsstep3。配置wechat-app代理:打开项目package.json文件,添加“代理”:“http://127.0.0.1:7080”step4。启动wechat-app项目npmstart4.开发效果图配置React项目的代理:微信测试公众号配置:生成appID和appsecret,调用接口use时需要调用。调用接口时需要配置URL和Token。URL的域名需要在公网可以访问,方便微信接口回调。Token作为消息,校验JS接口的安全域名:微信分享时,需要校验安全域名是否一致。如果域名不匹配,分享链接会显示异常。测试环境一般只能配置一个安全域名,线上环境最多可以配置三个。在微信测试工具中调试接口,点击发送,会出现一个漂亮的分享链接。5.遇到的一些坑react项目启动报错:react-scripts:commandnotfound,解决办法:执行npminstall如果还是不行,执行rm-rfnode_mdules然后执行npminstall使用域名代理时,启动项目并通过本地代理域名访问错误:InvalidHostheader解决方法:在项目根目录下,新建一个隐藏文件.env.development.local设置不验证域名DANGEROUSLY_DISABLE_HOST_CHECK=true6.参考文档和工具链接文档:微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115微信测??试公众号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login微信签名验证工具:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsasign微信分享的SDK:https://mp.weixin。qq.com/wiki?t=resource/res_main&id=mp1421141115axios文档:https://www.kancloud.cn/yunye/axios/234845es6入口:http://es6.ruanyifeng.com/#docs/async工具:网络风暴下载:http://www.jetbrains.com/webstorm/微信开发者工具下载:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140