成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

搭建并使用前端代理服務(wù)器

lyning / 2468人閱讀

摘要:本文主要是從前端的角度,使用搭建一個(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

相關(guān)文章

  • 搭建使用前端代理務(wù)器

    摘要:本文主要是從前端的角度,使用搭建一個(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è)...

    jasperyang 評(píng)論0 收藏0
  • Nginx

    摘要:此外,其也能夠提供強(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 ...

    syoya 評(píng)論0 收藏0
  • 前端跨域資源請(qǐng)求: JSONP/CORS/反向代理

    摘要:此時(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)境...

    番茄西紅柿 評(píng)論0 收藏0
  • [譯] 用 Node.js 搭建 API Gateway

    摘要:協(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ù)抽...

    鄒強(qiáng) 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<