1. 程式人生 > >nodejs + 小程式雲函式 生成小程式碼

nodejs + 小程式雲函式 生成小程式碼

前言:這個東西坑死我了 業務需求要生成小程式碼 然後我找了兩天的資料 執行 生成一堆的亂碼 死活就是不能生成 最後看了一遍部落格 套用了一下 自己又簡單的改了一下  nodejs 我是剛剛接觸  有很多都是不明白 request-promise  開始我用這個框架獲得“access_token

” 然後我就想 這個可以傳送請求  那生成小程式碼是不是也可以用這個  答案是錯誤的  裡面少了一個設定responseType: 'arraybuffer'  也許裡面有 但是我不知道  最後 我請求access_token 的時候用的是request-promise 這個框架  但是生成小程式碼的時候用的axios這個  行了不說了  直接上程式碼 第一步先匯入框架  如果自己沒有用到可以不用
npm install --save request  //
request框架 npm install --save request-promise // request框架promise風格 npm install --save axios // 資料請求框架,可將返回的資料型別設定為流`stream` # 備註:install 可以簡寫為 i ;save 作用是將這個庫新增到package.json裡

 

然後就是生成小程式碼了   下面的程式碼 直接可以複製貼上 直接可以用
const cloud = require('wx-server-sdk')
const axios = require('axios')
var rp = require('request-promise'); const fs = require('fs'); var stream = require('stream'); cloud.init() // 雲函式入口函式 exports.main = async (event, context) => { console.log(event) try { const resultValue = await rp('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + event.userInfo.appId + '&secret=' + event.appSectet) const token
= JSON.parse(resultValue).access_token; console.log('------ TOKEN:', token); //const response = await axios({ return await axios({ method: 'post', url: 'https://api.weixin.qq.com/wxa/getwxacode', //responseType: 'stream', responseType: 'arraybuffer', params: { access_token: token, }, data: { //access_token: token, path: "pages/index/index", width: 300, //scene: "id=12" }, }).then(function (response){ return response.data; }) } catch (err) { console.log('>>>>>> ERROR:', err) } }

再生成完小程式碼資料後  

在呼叫函式裡需要轉base64格式 然後圖片就生成了

wx.cloud.callFunction({ 
      name: 'getImage',
      data: {
        appSectet: app.globalData.appSectet
      }
    }).then(res => {
     
      var imgUrl = wx.arrayBufferToBase64(res.result); //res.result 
      imgUrl = ("data:image/png;base64," + imgUrl);
      console.log(imgUrl)
      thisData.setData({
        captchaImage1: imgUrl
      }) 
      
      
    })

如果你不想轉base64 的話  可以直接上傳到七牛  然後拿到路徑

那就直接在雲函式裡 加程式碼就可以  上傳的到七牛 用流的形式上傳到七牛  

**********注意 是在雲函式加程式碼呀    在上面的雲函式程式碼裡  就不能直接返回了  把.then後面的東西註釋掉  把這個response 變數開啟   然後要引入七牛的框架 

 
  
   const qiniu = require('qiniu')  //引入的七牛
   
  
    
   
  
    
   
  
var options = {
      scope: "你的空間",
    };
    var accessKey = "你的accessKey ";
    var secretKey = "你的secretKey ";
    var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
    var options = {
      scope: "bwt-portrait",
    };
    var putPolicy = new qiniu.rs.PutPolicy(options);
    var uploadToken = putPolicy.uploadToken(mac);
    console.log(uploadToken, "--------------")
    var config = new qiniu.conf.Config();
    // 空間對應的機房
    config.zone = qiniu.zone.Zone_z0

    var key = 'image10.png';
    return await new Promise(res => {
      var formUploader = new qiniu.form_up.FormUploader(config);
      var putExtra = new qiniu.form_up.PutExtra();
      var readableStream = response.data;
      formUploader.put(uploadToken, key, readableStream, putExtra, function (respErr,
        respBody, respInfo) {
        console.log("程式碼走了");
        if (respErr) {
          throw respErr;
        }
        if (respInfo.statusCode == 200) {
          console.log(respBody);
          res(respBody)
        } else {
          console.log(respInfo.statusCode);
          console.log(respBody);
          res(respInfo.statusCode)
        }
      });
    })

大體就是這樣 業務需求的不同 實現的也是不同的  可以自行更改 

 

最後我把我看的部落格地址連上   

https://blog.csdn.net/feng2qing/article/details/82914505?utm_source=blogxgwz5