摘要:本文主要是從前端的角度,使用搭建一個(gè)簡(jiǎn)易的測(cè)試項(xiàng)目,在自己搭建的代理服務(wù)的下實(shí)現(xiàn)簡(jiǎn)單的微信分享。在微信測(cè)試工具中調(diào)試接口,點(diǎn)擊發(fā)送即可會(huì)出現(xiàn)比較漂亮的分享鏈接。
一、背景簡(jiǎn)介:
目前流行的前后端分離項(xiàng)目,一般都處于不同的域名下,前后端開發(fā)過(guò)程中,是分別部署在不同服 務(wù)器上,在做接口聯(lián)調(diào)時(shí),會(huì)出現(xiàn)跨域的情況,部署上線時(shí),基本不存在這種需要,因此搭建一個(gè) 前端代理服務(wù),方便開發(fā)。 作為一個(gè)后端,需要了解下前端服務(wù)結(jié)構(gòu)和基本操作流程。 本文主要是從前端的角度,使用React搭建一個(gè)簡(jiǎn)易的測(cè)試項(xiàng)目,在自己搭建的代理服務(wù)的下實(shí) 現(xiàn)簡(jiǎn)單的微信分享 demo。
二、項(xiàng)目基本結(jié)構(gòu)
前端測(cè)試項(xiàng)目 `wechat-app` node代理服務(wù) `proxy—server` 后端接口服務(wù) `wechat-server`
三、搭建步驟:
3.1、創(chuàng)建一個(gè)React項(xiàng)目
創(chuàng)建步驟:(默認(rèn)機(jī)器已經(jīng)裝好node環(huán)境和npm包管理工具) 1、安裝React項(xiàng)目創(chuàng)建工具: npm install -g create-react-app 2、創(chuàng)建項(xiàng)目: create-react-app wechat-share 3、切換到項(xiàng)目: cd wechat-share 4、刪除src目錄下所有文件,新建一個(gè)index.js文件 5、安裝開發(fā)必要工具包 初始化: npm init 安裝react、react-dom: npm install --save react react-dom 安裝axios(http請(qǐng)求工具) npm install -—save axios 安裝微信jssdk npm install -—save weixin-js-sdk 安裝es6環(huán)境 npm install --save-dev babel-cli npm install babel-core --save npm install --save babel-polyfill
3.2 在index.js中編寫前端代碼:
分享基本流程:
1、配置微信公眾號(hào)
2、編寫后端服務(wù),前端從后端接口獲取微信配置參數(shù)(后端邏輯參考文檔實(shí)現(xiàn))
3、初始化配置
4、檢驗(yàn)js分享接口權(quán)限
5、從后端微信分享配置,初始化微信分享事件
import React from "react"; import ReactDOM from "react-dom"; import wx from "weixin-js-sdk"; import axios from "axios"; let wxConfig={}; let shareConfig={}; function getData(response){ if(response.status===200){ var resData=response.data; return resData; }else{ console.log("response is error:",response); return {}; } } function getWxConfig(){ return axios.post("share/mobile/getWXConfig",{"url":window.location.href}) .then(function (response) { var resData=getData(response); if(resData.status&&resData.status===1){ return resData.data; }else if(resData.data&&resData.data.message){ alert(resData.data.message); return {}; } }).catch(function(err){ console.log(err); }); } function getShareConfig(){ return axios.post( "/share/mobile/getShareInfo", {}).then( function (response) { var resData=getData(response); if(resData.status&&resData.status===1){ return resData.data; }else if(resData.data&&resData.data.message){ alert(resData.data.message); return {}; } }).catch(function(err){ console.log(err); }); } async function init() { wxConfig= await getWxConfig(); shareConfig =await getShareConfig(); wx.config({ debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。 appId: wxConfig.appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp:wxConfig.timestamp , // 必填,生成簽名的時(shí)間戳 nonceStr: wxConfig.noncestr, // 必填,生成簽名的隨機(jī)串 signature: wxConfig.signature,// 必填,簽名,見附錄1 jsApiList: ["onMenuShareAppMessage","onMenuShareQQ","onMenuShareTimeline"] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2 }); wx.checkJsApi({ jsApiList: ["onMenuShareAppMessage","onMenuShareQQ","onMenuShareTimeline"], // 需要檢測(cè)的JS接口列表,所有JS接口列表見附錄2, success: function(res) { console.log("checkJsApi init success!") } }); wx.ready(function(){ wx.onMenuShareAppMessage({ title: shareConfig.title, // 分享標(biāo)題 link: shareConfig.link, // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁(yè)面對(duì)應(yīng)的公眾號(hào)JS安全域名一致 imgUrl: shareConfig.imgUrl, // 分享圖標(biāo) success: function () { console.log("分享成功!") }, }); }) } init(); class RequestClass extends React.Component{ render () { return(Hello,World
) } }; ReactDOM.render(, document.getElementById("root") );
3.3、現(xiàn)在搭建代理服務(wù)proxy-server,在src目錄下新建proxy文件夾,編寫代理服務(wù)器代碼
1、node層代理了后端的 serverIp:serverPort/api 下的所有服務(wù),并且對(duì)外開放了7080端口,
所有請(qǐng)求代理服務(wù)器7080端口的服務(wù),都會(huì)被轉(zhuǎn)發(fā)到后端服務(wù)器上。
2、React項(xiàng)目的package.json文件中,配置了代理服務(wù)器地址,所有的接口請(qǐng)求都會(huì)通過(guò)7080端
口轉(zhuǎn)發(fā)到后端了。
step1、編寫代理服務(wù) "use strict"; const express = require("express"); const path = require("path"); const app = express(); const request = require("request"); // 配置靜態(tài)文件服務(wù)中間件 let serverUrl="http://serverIp:serverPort/api/";//server地址 app.use(express.static(path.join(__dirname, "./")));//靜態(tài)資源index.html和node代碼在一個(gè)目錄下 app.use("/", function(req, res) { let url = serverUrl + req.url; console.log("request url==>",url); req.pipe(request(url)).pipe(res); }); //本地服務(wù)代理在7080端口 app.listen(7080,"127.0.0.1", function () { console.log("proxy server is running at port 7080"); }); step2、啟動(dòng)代理服務(wù): node start proxy-server.js step3、配置wechat-app代理: 打開項(xiàng)目package.json文件,在配置的最后一行,加上 "proxy": "http://127.0.0.1:7080" step4、啟動(dòng)wechat-app項(xiàng)目 npm start
四、開發(fā)效果圖
配置React項(xiàng)目的代理:
微信測(cè)試公眾號(hào)配置: appID和appsecret是生成好的,再調(diào)用接口時(shí)需要使用。 URL和Token是接口調(diào)用時(shí),需要配置的,URL的域名需要在公網(wǎng)可以訪問(wèn),以方便微信接口回調(diào), Token作為消息驗(yàn)證 JS接口安全域名:在微信分享時(shí),需要校驗(yàn)安全域名是否符合,不匹配的域名,分享的鏈接會(huì)顯示不正常。 一般測(cè)試環(huán)境只能配置一個(gè)安全域名,線上環(huán)境最多可以配置三個(gè)。
在微信測(cè)試工具中調(diào)試接口 ,點(diǎn)擊發(fā)送即可會(huì)出現(xiàn)比較漂亮的分享鏈接。
五、遇到的一些坑
react項(xiàng)目啟動(dòng)報(bào)錯(cuò):react-scripts: command not found , 解決方法:執(zhí)行 npm install 如果還不行,則執(zhí)行 rm -rf node_mdules 然后執(zhí)行 npm install 域名代理時(shí),啟動(dòng)項(xiàng)目,通過(guò)本地代理域名訪問(wèn)報(bào)錯(cuò):Invalid Host header 解決方法:在項(xiàng)目根目錄下,新建一個(gè)隱藏文件 .env.development.local 設(shè)置不校驗(yàn)域名 DANGEROUSLY_DISABLE_HOST_CHECK=true
六、參考文檔和工具鏈接
文檔: 微信開發(fā)文檔: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 微信測(cè)試公眾號(hào): https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 微信簽名驗(yàn)簽工具: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 微信分享的SDK: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 axios文檔: https://www.kancloud.cn/yunye/axios/234845 es6入門: http://es6.ruanyifeng.com/#docs/async 工具: webstorm下載: http://www.jetbrains.com/webstorm/ 微信開發(fā)者工具下載: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/51727.html
摘要:本文主要是從前端的角度,使用搭建一個(gè)簡(jiǎn)易的測(cè)試項(xiàng)目,在自己搭建的代理服務(wù)的下實(shí)現(xiàn)簡(jiǎn)單的微信分享。在微信測(cè)試工具中調(diào)試接口,點(diǎn)擊發(fā)送即可會(huì)出現(xiàn)比較漂亮的分享鏈接。 一、背景簡(jiǎn)介: 目前流行的前后端分離項(xiàng)目,一般都處于不同的域名下,前后端開發(fā)過(guò)程中,是分別部署在不同服 務(wù)器上,在做接口聯(lián)調(diào)時(shí),會(huì)出現(xiàn)跨域的情況,部署上線時(shí),基本不存在這種需要,因此搭建一個(gè) 前端代理服務(wù),方便開發(fā)。 作為一個(gè)...
摘要:此外,其也能夠提供強(qiáng)大的反向代理功能。是由為俄羅斯訪問(wèn)量第二的站點(diǎn)開發(fā)的,第一個(gè)公開版本發(fā)布于年月日。 keepalived+nginx 實(shí)現(xiàn)高可用雙機(jī)熱備 + 負(fù)載均衡架構(gòu) 1 準(zhǔn)備4個(gè)ubuntu16.04虛擬機(jī)(啟用網(wǎng)卡二并使用橋接模式):A服務(wù)器:192.168.0.103 主B服務(wù)器:192.168.0.104 主(備) 前端工程師學(xué)習(xí) Nginx ...
摘要:此時(shí)完成的跨域代理配置僅僅是在開發(fā)環(huán)境下生效,到了生產(chǎn)環(huán)境下如果是放到服務(wù)器上則還需要借助的反向代理來(lái)進(jìn)行跨域的代理。跨域 指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器對(duì) JavaScript 施加的安全限制。同源就是指 域名,協(xié)議,端口 均相同。兩個(gè)網(wǎng)域若 域名、協(xié)議、端口 任一不同則二者的通信就出現(xiàn)了跨域問(wèn)題,前端的跨域問(wèn)題普通存在于兩個(gè)階段,一個(gè)是開發(fā)環(huán)境...
摘要:協(xié)議轉(zhuǎn)換微服務(wù)架構(gòu)允許使用不同的協(xié)議以便于獲得使用不同技術(shù)的優(yōu)勢(shì)。過(guò)于龐大的在實(shí)現(xiàn)時(shí),應(yīng)當(dāng)避免將非通用邏輯如領(lǐng)域特定數(shù)據(jù)轉(zhuǎn)換放入其中。服務(wù)應(yīng)始終對(duì)其數(shù)據(jù)域擁有完全的所有權(quán)。構(gòu)建一個(gè)過(guò)于龐大的,從服務(wù)團(tuán)隊(duì)爭(zhēng)奪控制權(quán),這違反了微服務(wù)的理念。 我們團(tuán)隊(duì)的后端服務(wù)中,一開始只有一個(gè)大服務(wù),所有的東西都往里面寫,可以想象下,當(dāng)這個(gè)服務(wù)變得不斷的龐大,將會(huì)變得多么難以維護(hù)。后來(lái)逐漸把一些數(shù)據(jù)服務(wù)抽...
閱讀 1712·2021-10-28 09:32
閱讀 615·2021-09-24 09:47
閱讀 2937·2021-09-02 15:11
閱讀 2742·2021-08-09 13:46
閱讀 2893·2019-08-30 15:55
閱讀 1078·2019-08-30 15:54
閱讀 3313·2019-08-29 14:12
閱讀 816·2019-08-26 13:40