小程序開發(fā)當中踩到的坑

為了參加微信小程序開發(fā)大賽婆跑,了解了微信小程序的開發(fā)店乐,在實際的開發(fā)過程中遇到了一些問題,以此記錄侄泽,避免再犯!

簡述

剛接觸小程序的開發(fā)蜻韭,個人覺得要寫好小程序悼尾,得熟悉前端開發(fā),因為小程序的編碼基于HTML肖方、CSSJS闺魏。只不過在微信中,為了打造微信的生態(tài)圈俯画,重新定義了小程序編碼析桥。其實質(zhì)還是和前端開發(fā)類似,如果你有了解過NodeJS的開發(fā)活翩,那么微信小程序的開發(fā)自然不是什么問題烹骨。


小程序和前端開發(fā)的關(guān)系

小程序開發(fā)工具文件視圖如下:


文件視圖

簡而言之有如下的對應(yīng)關(guān)系

  • pages 中放置頁面

  • utils 放置其他的靜態(tài)資源等等

  • app.js 小程序初始化

  • app.json 小程序配置

  • app.wxss 小程序的全局樣式文件

  • project.config.json 項目的配置文件(開發(fā)者工具中可視化編輯)

在頁面下翻伺,有如下的對應(yīng)關(guān)系

小程序 前端 說明
WXML HTML 基本沒啥區(qū)別材泄,微信中有自己的組件
WXSS CSS 寫法完全是一樣的
JS JS 了解一下NodeJS,動態(tài)地去渲染前端
JSON JSON 小程序每個Page都有一個同名json文件用于配置信息

其實就這么簡單吨岭,初學(xué)者或者入門前端不久的同學(xué)拉宗,可以看看官方文檔的“入門教程”,其實小程序上線還有一些限制的辣辫,功能限制于賬號主體屬性旦事,或者有的小程序不符合價值觀的當然也是不能上線。


踩過的坑

說來這個部分才是干貨急灭,不得不抱怨一句姐浮,一開始拿到的時候還是挺煩的,由于WXML中的各種控件都改了葬馋,有的CSS布局不知道出了什么蜜汁問題卖鲤,然后一通”瞎搞“,也算是弄出來了畴嘶。

1. 全局變量

全局變量是個好東西(全局變量雖好蛋逾,切記不可貪杯),給出app.js代碼如下:

//app.js
App({
  onLaunch: function () {
    // 展示本地存儲能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登錄
    wx.login({
      success: res => {
        // 發(fā)送 res.code 到后臺換取 openId, sessionKey, unionId
        
        this.globalData.userKeyCode = res.code;

        //登陸請求 開發(fā)者服務(wù)器
        wx.request({
          url: this.globalData.main_url+'/user/login?code=' + res.code,
          success: (res) => {
            //獲取用戶keycode
            this.globalData.userinfo_isfinish = res.data.data.is_finish;
            console.log(res.data.data.is_finish);
            //獲取headers
            this.globalData.headers.Cookie = res.header["Set-Cookie"];
          }
        })
        
      }
    })
    // 獲取用戶信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已經(jīng)授權(quán)窗悯,可以直接調(diào)用 getUserInfo 獲取頭像昵稱区匣,不會彈框
          wx.getUserInfo({
            success: res => {
              // 可以將 res 發(fā)送給后臺解碼出 unionId
              this.globalData.userInfo = res.userInfo;

              var userinfo_temp = this.globalData.userInfo;

              //完善用戶信息
              if (!this.globalData.userinfo_isfinish){
                wx.request({
                  url: this.globalData.main_url+'/user/finishinfo?nickname='+userinfo_temp.nickName + "&avatar=" + userinfo_temp.avatarUrl + "&gender=" + userinfo_temp.gender + "&city=" + userinfo_temp.city + "/" + userinfo_temp.province,
                  header: this.globalData.headers,
                  success: res => {
                    console.log("微信用戶第一次登陸完善信息成功!")
                  }
                })
                // 由于 getUserInfo 是網(wǎng)絡(luò)請求蒋院,可能會在 Page.onLoad 之后才返回
                // 所以此處加入 callback 以防止這種情況
                if (this.userInfoReadyCallback) {
                  this.userInfoReadyCallback(res)
                }
              }
            }
          })
        }
      }
    })
  },
  globalData: {
    main_url : "http://192.168.43.121/art/public/index",
    userInfo: null,
    userKeyCode:null,
    userinfo_isfinish:true,
    headers: {'Cookie': ''},
    userLoaction:''
  }
})
2.網(wǎng)絡(luò)請求

這個坑亏钩,是在開發(fā)過程中向后端請求數(shù)據(jù)莲绰,發(fā)現(xiàn)提示沒有登陸,原來每次請求都得帶上header中的cookie姑丑,小程序的網(wǎng)絡(luò)請求不會自己帶上钉蒲,所有也就導(dǎo)致了服務(wù)端并沒有接受到正確的session,如上代碼彻坛,在app.js中保存cookie為一個header的全局變量顷啼,每次請求的時候帶上這個變量就行了。
全局變量的使用:

//在頁面中的js文件中聲明
const app = const app = getApp()
//然后在需要的地方寫
this.setData({
    header: app.globalData.headers
})

3.this.setData不是一個fucntion

出現(xiàn)這個的原因是因為:在函數(shù)中this指向的是當前函數(shù)的上一級昌屉,當我們網(wǎng)絡(luò)請求success封包函數(shù)中這樣去給data賦值钙蒙,就會出現(xiàn)這個錯誤。
解決方法:

//在任意函數(shù)下聲明
var that = this;
//然后
that.setData({
    code: res.code
})

總結(jié)

勤加練習(xí)间驮,小程序就會非常熟練了躬厌,建議翻閱一下小程序的文檔,然后想一個點子竞帽,然后去實現(xiàn)它扛施,不會的地方就去看文檔,文檔就是拿來看的屹篓,不是讓你背下來疙渣,當然背下來編碼速度更快一些,假以時日堆巧,相信大家都能非常熟練地編寫小程序妄荔,共勉!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谍肤,一起剝皮案震驚了整個濱河市啦租,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荒揣,老刑警劉巖篷角,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異系任,居然都是意外死亡恳蹲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門赋除,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阱缓,“玉大人,你說我怎么就攤上這事举农【U耄” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長航背。 經(jīng)常有香客問我喉悴,道長,這世上最難降的妖魔是什么玖媚? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任箕肃,我火速辦了婚禮,結(jié)果婚禮上今魔,老公的妹妹穿的比我還像新娘勺像。我一直安慰自己,他們只是感情好错森,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布吟宦。 她就那樣靜靜地躺著,像睡著了一般涩维。 火紅的嫁衣襯著肌膚如雪殃姓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天瓦阐,我揣著相機與錄音蜗侈,去河邊找鬼。 笑死睡蟋,一個胖子當著我的面吹牛踏幻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播薄湿,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叫倍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豺瘤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤听诸,失蹤者是張志新(化名)和其女友劉穎坐求,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晌梨,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡桥嗤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仔蝌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泛领。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敛惊,靈堂內(nèi)的尸體忽然破棺而出渊鞋,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布锡宋,位于F島的核電站儡湾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏执俩。R本人自食惡果不足惜徐钠,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望役首。 院中可真熱鬧尝丐,春花似錦、人聲如沸衡奥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杰赛。三九已至呢簸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乏屯,已是汗流浹背根时。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辰晕,地道東北人蛤迎。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像含友,于是被迫代替她去往敵國和親替裆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容