亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序項目總結之記賬小程序功能的實現(包括后端)

2020-03-21 15:15:43
字體:
來源:轉載
供稿:網友

一、小程序部分

這是理財系統的前端,江蘇海洋大學微信小程序比賽,最后獲得了一等獎
GitHub:https://github.com/GeorgeLeoo/finance

1. 項目描述

(1). 此項目為記賬小程序
(2). 包括賬單、圖表、搜索、用戶等多個子模塊
(3). 使用微信小程序技術 
(4). 采用模塊化、組件化、工程化等模式開發

2. 項目功能界面

微信小程序,記賬小程序

在 1.0.2版本中刪除了扇形圖

3. 項目目錄

微信小程序,記賬小程序

 * pages:頁面  * components:組件  * utils:工具類     |-- util.js:工具類     |-- wxcharts.js:圖表插件  * images:資源圖片  * config:配置文件  * filter:過濾器  * http:網絡請求    |-- http.js:對 wx.request 的封裝    |-- api.js:對網絡請求接口的封裝  

4. 請求封裝

一開始使用 wx.request 對數據進行網絡請求,可寫完后,發現太過冗余,也太麻煩,故對其做了封裝。
通過創建一個函數返回 Promise 對象,就可以屏蔽公共的部分

// http/http.js/** * 對微信普通網絡請求封裝 * @param url  請求地址 * @param data 請求的參數 * @param method  請求的方法類型  * @param headers  頭部信息,在這里主要是 token 認證功能 * @returns {Promise<unknown>} 返回請求的 Promise 對象 */function http({url, data, method, headers = {}}) {  return new Promise((resolve, reject) => {    wx.request({      url,      method,      data,      header: {        Authorization: headers.token,        expiresIn: headers.expiresIn      },      success: (result) => {        const res = result.data;        if (res.code === 0) {          resolve(res.data);        } else if (res.code === 1) {          reject(res.msg);        }        // 隱藏 loading        wx.hideLoading();      },      fail: (err) => {        console.error('server error', err);      }    });  })}/** * 對文件上傳接口封裝 * @param url  請求地址 * @param fileOptions  文件配置項 * @param data 請求發送的數據 * @param headers  頭部信息,在這里主要是 token 認證功能 * @returns {Promise<unknown>} 返回請求的 Promise 對象 */function uploadFile({url, fileOptions, data, headers = {}}) {  return new Promise(((resolve, reject) => {    wx.uploadFile({      url: url,      filePath: fileOptions.filePath,      name: fileOptions.name || 'file',      header: {        Authorization: headers.token,        expiresIn: headers.expiresIn      },      formData: data,      success: (res) => {        console.log(res.data);        if (JSON.parse(res.data).code === 0) {          resolve(res.data);        } else if (res.code === 1) {          reject(res.msg);        }      },      fail: (err) => {        console.error('server error', err);      }    })  }))}module.exports = {  http,  uploadFile};

5. 遇到的問題

(1). 在更新賬單數據后,如何更新賬單界面的數據?
        這個問題我的解決方案是,在 globalData 中添加一個全部變量 isRefreshBills,默認為 false,
     當更新賬單數據成功后,將 isRefreshBills 修改為 true,同時返回到賬單界面,在賬單界面的
     onShow()方法中,判斷 isRefreshBills 是否為 true,若為 true 則重新請求數據,同時將 isRefreshBills 
     設為 false,否則不請求。這樣就避免了沒有更新數據的情況下多次請求數據。
        對這個解法,還有一種更加節流的方法,就是更新后不去請求,而是對原來的獲取到的數據進行個別刪除。比如當
     更新數據成功后,獲取一個被更新的這條數據的id,然后在賬單頁面的 onShow() 方法中,遍歷找到這個 id 對應的
     數據,并刪除這條數據也能達到數據更新的效果
     
(2). 在進行類別添加的時候,自定義的類別會出現雙倍?
        由于我有一分部初始數據是存在 globalData 中的,每次從服務器獲取自定義類別時,都會對其進行拼接,
     在拼接的時候修改了原來的 globalData 中的值,所以每次添加后都會請求一次自定義數據,進行拼接。
     解決方案:禁止更新 globalData 中的數據
     
(3). 返回哪個頁面問題?
        在賬單頁面可以進去修改賬單的頁面,在搜索頁面也可以進入修改賬單賬單的頁面,他們用的是同一個組件,
     那么如何保證在賬單頁面進入修改賬單頁面后返回到賬單頁面,在搜索頁面進入修改賬單頁面后返回到搜索頁面。
     首先在路由跳轉的時候添加當前路由信息,然后在修改賬單頁面中接受這個路由信息,最后通過這個路由信息返回到原來的路由

6. 總結

 這個項目是我5月份參加學校微信小程序的項目,兩個禮拜倉促的做了這么一個項目,前后端都有,最后榮獲一等獎。
    在之前比賽用的版本中其實有很多的 bug 以及卡頓現象居多,故這兩天我有對這個項目進行了一定的維護,發現原來的代碼實在
    慘不忍睹,現在經過升級,頁面卡頓現象減少,若后期再想維護,也相對于之前的版本好維護多了,但是還有很多可以維護的空間。
    其實我并不對這個項目很滿意,比如之前我沒做分頁加載, 現在想加個分頁加載的功能,我發現并不是一下子就能搞定的,
    因為我的數據結構不是很合理,因為后端返回的數據和前端要顯示的數據格式是不一致,故前端要重新定義數據結構,
    所以對分頁來說就有一定的困難。在我對項目進行維護后,代碼比以前更簡潔,可讀性相對于之前的版本來說要更加好。

二、服務器部分

1.簡述

這個項目是微信小程序記賬 app 的后端代碼,使用技術:MongoDB+Express。
GitHub:https://github.com/GeorgeLeoo/finance-server

這個項目的目錄是這樣的


微信小程序,記賬小程序

  • config: 配置文件
  • routes: 路由配置
  • utils: 工具類
  • db: 操作數據庫的代碼
  • controller: 控制是當前地址否要 token 驗證
  • service: 如何調用操作數據庫函數(我也不知道為什么要寫controller,service,感覺這兩個寫一個就可以了)

2.遇到的問題

(1). token 驗證問題?

關于 token 驗證問題我使用了 jsonwebtoken 插件,故先用 npm 安裝這個插件。
token 驗證流程大概如下圖:


微信小程序,記賬小程序

使用這個插件: 定義兩個方法,一個用來生成 token,另一個用來驗證 token。

 

 /** * 生成token * @param {object} content 對某個內容生成 token */ const access_token=function (content) {   let secret = 'jizhangxitongfinancegeorgeleeo'; // 秘鑰   let expiresIn = Math.round((new Date().getTime()/1000)) + 3600; // 過期時間   let token = jwt.sign(content, secret, { expiresIn });   return {     token,     expiresIn   }; } /** * 驗證token * @param {string} token token值 */ const check_token= function (token) {   let secret = 'jizhangxitongfinancegeorgeleeo'; // 秘鑰,根生成的 token 要一致   return new Promise((resolve, reject) => {     jwt.verify(token, secret, (err, decode) => {       if (err) {         //時間失效或偽造 token 或 token 不存在         reject({           status: 10010,           error: 'invalid_token'         });       } else {         resolve();       }     });   }) }

在controller.js 中,去判斷 token 驗證成功與否

function billController(method, options, req, res) {  // 驗證 token  utils.check_token(req.headers.authorization, res).then(() => {    // token驗證成功,調用操作數據庫的方法    billService[method](options).then((data) => {      res.json(data);    }).catch((err) => {      res.json(err)    });  }).catch((err) => {    // token 驗證失敗    res.json(err)  })}

(2). 文件上傳問題?

在這個項目中,有使用文件上傳的功能,express 默認是帶這個功能的,所以就必須使用 npm
安裝 express-fileupload 這個插件,然后再 app.js 中引入并注冊這個插件

var fileUpload = require('express-fileupload');app.use(fileUpload());

當前端發送文件時,后端從 req.files['name']獲取 file 對象,然后通過 file.mv()方法進行文件存儲

  file.mv(fileSavePath, function (e) {    if (e) {      // 失敗時    } else {      // 成功時    }  });

比如我的項目中,上傳圖片代碼抽取出來就是

 // 小程序代碼    wx.uploadFile({      url: 'http://localhost:3000/users/avatar',      filePath: 'XXXXXXX',      name: 'avatar',      header: {        Authorization: headers.token,        expiresIn: headers.expiresIn      },      formData: data,      success: (res) => {},      fail: (err) => {}    });  // 服務器代碼    let file = req.files.avatar    file.mv('upload/a.png', function (e) {      if (e) {        // 失敗時      } else {        // 成功時      }    });

(3). 關于前端讀取upload中圖片的問題

本來想用服務器的 ip 來讀取項目中 upload 中的圖片,但是發現并不能讀取,或顯示404,故最后將 upload 文件放在了項目的外邊,

然后對這個 upload 文件單獨開了一個服務,把他當做圖片服務器來使用。

3. 總結

當初選用 Express + MongoDB 的唯一原因就是開發快,因為基本上每天都滿課,所以快速開發是我的需要。在這個項目中其實還有很多可以優化的地方,還有一定的冗余,比如在操作數據的時候,所有的查詢成功或失敗的函數都可以存放到一個公共類里面,而不是每一對應的文件里都有一個這個方法

Github:

小程序:https://github.com/GeorgeLeoo/finance

服務器:https://github.com/GeorgeLeoo/finance-server

總結

以上所述是小編給大家介紹的微信小程序項目總結之記賬小程序功能的實現(包括后端),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到微信小程序開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕欧美精品在线| 91久久精品视频| 日韩在线一区二区三区免费视频| 欧美专区国产专区| 日韩久久精品电影| 美女久久久久久久| 91香蕉嫩草神马影院在线观看| 欧美性猛交xxxx富婆| 中文字幕精品在线视频| 欧美国产日产韩国视频| 秋霞av国产精品一区| 日韩欧美在线播放| 国产精品99蜜臀久久不卡二区| 国产成+人+综合+亚洲欧美丁香花| 久久久精品久久久久| 欧美激情欧美激情在线五月| 亚洲护士老师的毛茸茸最新章节| 成人亚洲综合色就1024| 91国产视频在线播放| 成人久久18免费网站图片| 社区色欧美激情 | 欧美日韩中文字幕在线视频| 中文字幕日韩精品在线| 中日韩午夜理伦电影免费| 久久久91精品国产一区不卡| 色爱av美腿丝袜综合粉嫩av| 亚洲成av人影院在线观看| 久久久精品在线| 国产精品黄页免费高清在线观看| 国产亚洲精品久久久久动| 日韩综合中文字幕| 国产精品va在线播放| 97国产一区二区精品久久呦| 亚洲精品视频免费| 欧美自拍视频在线| 高清一区二区三区四区五区| 亚洲第一区在线| 欧美视频在线看| 欧美亚洲午夜视频在线观看| 日韩av大片免费看| 国产精品日韩欧美大师| 日韩中文在线观看| 亚洲日本欧美日韩高观看| 久久精品一区中文字幕| 欧美国产高跟鞋裸体秀xxxhd| 国产精品视频导航| 久久久精品国产亚洲| 久久久人成影片一区二区三区| 久久久久久亚洲精品不卡| 亚洲福利小视频| 国产精品va在线播放我和闺蜜| 久热爱精品视频线路一| 日韩在线中文视频| 亚洲理论电影网| 久久久久免费视频| 97香蕉久久超级碰碰高清版| 久久久久这里只有精品| 中文字幕一区二区三区电影| 国产精品久久久久不卡| 欧美性20hd另类| 国产a∨精品一区二区三区不卡| 久久青草福利网站| www.亚洲男人天堂| 美日韩精品免费观看视频| 国产精品久久久久久久av大片| 久久久亚洲福利精品午夜| 91精品国产乱码久久久久久蜜臀| 深夜福利日韩在线看| 亚洲精品国偷自产在线99热| 亚洲桃花岛网站| 日本精品视频在线播放| 国产精品成人免费电影| 欧美午夜精品久久久久久浪潮| 成人网在线免费观看| 亚洲成年人影院在线| 亚洲午夜未删减在线观看| 国产精品黄视频| 国产精品久久9| 欧美电影免费观看| 久久成人在线视频| 一个色综合导航| 日韩人在线观看| 欧美日韩中文字幕在线视频| 这里只有精品久久| 91精品国产综合久久久久久久久| 77777亚洲午夜久久多人| 国产成人小视频在线观看| 成人乱色短篇合集| 欧美午夜精品久久久久久久| 欧美午夜精品久久久久久久| 国产成人精品久久二区二区91| 亚洲精品国产精品久久清纯直播| 日韩免费黄色av| 92国产精品视频| 91成人在线播放| 亚洲女同性videos| 欧美亚洲国产视频| 欧美激情一区二区三区在线视频观看| 色婷婷综合久久久久| 亚洲国产精品网站| 亚洲精品美女网站| 欧美日韩国产精品| 国产亚洲欧美日韩一区二区| 77777少妇光屁股久久一区| 国产一区二区三区网站| 色综合老司机第九色激情| 国产成人一区二区| 国内精品400部情侣激情| 4p变态网欧美系列| 日韩精品亚洲精品| 亚洲综合色激情五月| 97久久久免费福利网址| 中文字幕日韩在线视频| 亚洲肉体裸体xxxx137| 亚洲欧美国产一区二区三区| 色综合久久天天综线观看| 98精品国产高清在线xxxx天堂| 一本色道久久综合狠狠躁篇怎么玩| 中文字幕亚洲色图| 国产成人一区二区三区小说| 国产深夜精品福利| 午夜免费在线观看精品视频| 欧美乱妇40p| 91精品国产高清久久久久久91| 国产精品专区第二| 欧美最猛黑人xxxx黑人猛叫黄| 精品中文字幕在线| 国产成人高清激情视频在线观看| 欧美激情视频给我| 亚洲精品电影在线观看| 亚洲免费伊人电影在线观看av| 亚洲欧美日韩中文在线| 国产精品美女www| 中文字幕亚洲综合久久| 国模视频一区二区| 欧美精品videossex性护士| 久久香蕉频线观| 成人黄色av网| 青青草原一区二区| 狠狠久久亚洲欧美专区| 国产成人在线播放| 在线成人激情黄色| 国产999精品| 久久福利视频导航| 午夜精品久久久久久久男人的天堂| 亚洲精品99久久久久中文字幕| 中文字幕亚洲天堂| 这里只有精品在线观看| 精品五月天久久| 欧美日韩中文字幕在线| 国产精品色悠悠| 中文字幕精品一区二区精品| 亚洲男人天堂2023| 亚洲第一黄色网| x99av成人免费| 久久男人资源视频| 91av中文字幕| 欧美日韩xxx| 亚洲视频一区二区| 日韩激情片免费| 26uuu国产精品视频| 亚洲综合精品一区二区| 久久天堂av综合合色| 日韩高清电影免费观看完整|