第 3-5 課:雲開發之資料庫操作
目錄
- 開篇
- 【系】微信小程式雲開發實戰堅果商城-開篇
- 基礎篇
- 【系】微信小程式雲開發實戰堅果商城-彈性盒子
- 【系】微信小程式雲開發實戰堅果商城-ES6 簡單入門
- 【系】微信小程式雲開發實戰堅果商城-官方案例先運作
- 前端篇
- 【系】微信小程式雲開發實戰堅果商城-商城項目搭建
- 【系】微信小程式雲開發實戰堅果商城-所有目錄…
1 資料庫操作公共類
開發所需官方文檔,對于資料庫常見的操作增删查改,如果每一個集合都去寫一個資料庫操作的代碼,後期我們的版本更新和産品的不斷變化,我們需要大量的時間去排查和修改。提取我們認為所有的重合的代碼,重合的代碼是不利于後期的維護,在代碼的編寫的時候重合的代碼我們得及時提取出來和接下來我們未來極大可能重合的。
在
index
雲函數建立一個檔案
models/BaseModel.js
,相同的方法不同的業務層調用,很多傳回條件不是必須傳的,這裡我們就預設給出一個初始值,使得代碼更容易會擴充,實作代碼如下:
// 公共BaseModel
const cloud = require('wx-server-sdk');
cloud.init({
// 自身環境
env: 'release-prod',
traceUser: true,
});
const db = cloud.database();
/**
* 查詢處理
* @param {object} model 集合名稱
* @param {String} id 查詢id
* @return {object|null} 查找結果
*/
const findById = (model, fields = {} , id ) => {
try {
return db.collection(model)
.doc(id)
.field(fields)
.get()
} catch (e) {
console.error(e)
}
}
/**
* 查詢處理 帶多條件的
* @param {object} model 集合名稱
* @param {Object} [options={}] 查詢條件
* @param {Number} [page] 開始記錄數
* @param {Number} [size] 每頁顯示的記錄數
* @return {object|null} 查找結果
*/
const query = (model, fields = {}, options = {}, page = 0, size = 10, order = { name: '_id', orderBy:'asc'} ) => {
try {
return db.collection(model)
.where(options)
.field(fields)
.skip(page)
.limit(size)
.orderBy(order.name, order.orderBy)
.get()
} catch (e) {
console.error(e)
}
}
/**
* 新增處理
* @param {object} model 集合名稱
* @param {object} params 參數
* @return {object| null} 操作結果
*/
const add = (model, params) => {
try {
return db.collection(model).add({
data: params
});
} catch (e) {
console.error(e);
}
}
/**
* 編輯處理
* @param {object} model 集合名稱
* @param {object} params 參數
* @return {object|null} 操作結果
*/
const update = (model, params) => {
try {
return db.collection(model).doc(params._id)
.update({
data: params
})
} catch (e) {
console.error(e);
}
}
/**
* 删除結果
* @param {object} model 集合名稱
* @param {String} id 參數
* @return {object|null} 操作結果
*/
const remove = (model, id) => {
try {
return db.collection(model).doc(id).remove()
} catch (e) {
console.error(e)
}
}
module.exports = {
query,
findById,
add,
update,
remove
}
env : 預設環境配置,傳入字元串形式的環境 ID 可以指定所有服務的預設環境,傳入對象可以分别指定各個服務的預設環境
traceUser : 是否在将使用者通路記錄到使用者管理中,在控制台中可見
上面的對資料庫的操作封裝,大家對于部分不了解的操作指令記得檢視下官方文檔
接下來驗證下我們的代碼是否有錯
在雲函數
index
中建立一個檔案
test/models/BaseModelsTest.js
,
test
大家在測試的主要每一個測試檔案的關系不要直接全部建立在一個檔案夾,指令的時候也需要注意下,不然後面排除需要尋找半天。
BaseModelsTest.js
const model = require('models/BaseModel.js')
// 測試BaseModel
/**
* 編輯處理
* @param {object} document 集合名稱
* @param {object} type 參數
* @return {object|null} 操作結果
*/
const baseTest = (type = 1, field = {},doc='test') => {
let result
let id = 'f896855d5cfb5f6901c18d424a19b0bd'
switch (type) {
case 1:
// 1、查詢所有
result = model.query(doc,field)
break;
case 2:
//2、 根據id查詢
result = model.findById(doc,id)
break;
case 3:
//3、新增
let params_add = {name:'test01',age:12,sex:0,show:true}
result = model.add(doc, params_add)
break;
case 4:
//4、修改
let params_update = {id:id, name:'test02', age:20,sex:1, show: true }
result = model.update(doc, params_update)
break;
case 5:
// 5、删除
result = model.remove(doc,id)
break;
}
return result
}
module.exports = {
baseTest
}
可能測試的有點麻煩 ,我們需要在入口檔案建立一個路由本地調式下,可根據
BaseModelsTest.js
參數改變操作
index.js
/*************************** 訂單 *****************************************/
app.router('tests', async (ctx, next) => {
// test 可參數類型 是否決定傳參
ctx.data = await baseTest.test()
ctx.body = await returnUtil.success(ctx);
await next();
})
部署不成功、圖檔無法顯示、資料庫無法擷取,快速部署堅果商城,歡迎微信搜尋「山間木匠」,背景回複關鍵字「堅果商城」擷取最新PDF
源碼位址
在搭建項目前,根據自己需要下載下傳本系列文章的源代碼
本項目源碼位址:https://gitee.com/mtcarpenter/nux-shop