nodejs + 小程式雲函式 生成小程式碼
阿新 • • 發佈:2018-11-19
前言:這個東西坑死我了 業務需求要生成小程式碼 然後我找了兩天的資料 執行 生成一堆的亂碼 死活就是不能生成 最後看了一遍部落格 套用了一下 自己又簡單的改了一下 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