https://www.cnblogs.com/cckui/p/10228795.html
.
├── README.md
├── project.config.json // 项目配置文件
├── cloudfunctions | 云环境 // 存放云函数的目录
│ ├── login // 用户登录云函数
│ │ ├── index.js
│ │ └── package.json
│ └── collection_get // 数据库查询云函数
│ │ ├── index.js
│ │ └── package.json
│ └── collection_update // 数据库更新云函数
│ ├── index.js
│ └── package.json
└── miniprogram
├── images // 存放小程序图片
├── lib // 配置文件
├── pages // 小程序各种页面
| ├── index // 首页
| └── menu // 分类页
| └── user // 用户中心
| └── search // 搜索页
| └── list // 列表页 搜索结果页
| └── detail // 详情页
| └── collection // 收藏页
| └── find // 发现页
| └── idiom-jielong // 成语接龙页
| └── poet // 作者页
| └── baijiaxing // 百家姓
| └── xiehouyu // 歇后语
| └── poet // 作者页
| └── suggest // 建议反馈
| └── ... // 其他
├── style // 样式文件目录
├── app.js // 小程序入口文件
├── app.json // 全局配置
└── app.wxss // 全局样式
يستخدم هذا المشروع برنامجًا صغيرًا للتطوير السحابي. يوفر التطوير السحابي قاعدة بيانات JSON، ويمكن للمستخدمين إضافة قاعدة البيانات وحذفها وتعديلها والاستعلام عنها مباشرة في السحابة، ومع ذلك، يفرض البرنامج المصغر قيودًا معينة على أذونات المستخدم لتشغيل البيانات (مثل تحديث البيانات والحصول عليها لمرة واحدة). حد عدد السجلات، وما إلى ذلك). لذلك، يتم استخدام الوظائف السحابية بشكل أساسي هنا لتشغيل قاعدة البيانات.
انقر بزر الماوس الأيمن على الدليل الجذر للوظيفة، وفي قائمة النقر بزر الماوس الأيمن، حدد إنشاء وظيفة سحابية جديدة لـ Node.js، وقمنا بتسمية الوظيفة السحابية Collection_get.
تحرير ملف Index.js:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
exports.main = async (event, context) => {
/**
* page: 第几页
* num: 每页几条数据
* condition: 查询条件,例如 { name: '李白' }
*/
const {database, page, num, condition} = event
console.log(event)
try {
return await db.collection(database)
.where(condition)
.skip(num * (page - 1))
.limit(num)
.get()
} catch (err) {
console.log(err)
}
}
على سبيل المثال، قم بالاستعلام عن قائمة القصائد وفقًا لشروط الاستعلام {tags: '唐诗三百首'}
، وكل صفحة num = 10
أجزاء من البيانات:
let {list, page, num} = this.data
let that = this
this.setData({
loading: true
})
wx.cloud.callFunction({
name: 'collection_get',
data: {
database: 'gushici',
page,
num,
condition: {
tags: '唐诗三百首'
}
},
}).then(res => {
if(!res.result.data.length) {
that.setData({
loading: false,
isOver: true
})
} else {
let res_data = res.result.data
list.push(...res_data)
that.setData({
list,
page: page + 1, // 页面加1
loading: false
})
}
})
.catch(console.error)
}
لاحظ أنه عندما نضيف سجلات إلى قاعدة البيانات، سيقوم النظام تلقائيًا بإضافة حقل openid
الخاص بالمستخدم إلى كل سجل لنا. ومع ذلك، إذا تم استيراد جدول البيانات بأنفسنا باستخدام ملف json/csv، فلن يكون هناك حقل openid
هذه المرة، عند تحديث جدول البيانات هذا، سيعتقد النظام أنك لست منشئه، لذلك لا يمكن تحديثه.
في هذا الوقت، تحتاج إلى تحديث قاعدة البيانات من خلال الوظيفة السحابية، وإنشاء وظيفة سحابية جديدة Collection_update، وتحرير ملف Index.js:
// 更新数据 - 根据 _id 更新已打开人数
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const _ = db.command
exports.main = async (event, context) => {
const { id } = event
console.log(event)
try {
return await db.collection('gushici').doc(id)
.update({
data: {
opened: _.inc(1)
},
})
} catch (e) {
console.error(e)
}
}
قم بتحديث عدد الأشخاص الذين يفتحون بيانات _id معينة:
let _id = e.currentTarget.dataset.id
wx.cloud.callFunction({
name: 'collection_update',
data: {
id: _id
},
}).then(res => {
console.log(res.data)
})
.catch(console.error)
يمكن للتطوير السحابي للبرنامج المصغر استخدام التعبيرات العادية لإجراء استعلامات غامضة. على سبيل المثال، استنادًا إلى إدخال المستخدم للكلمات الأساسية، يحتوي عنوان الاستعلام على قصائد قديمة مع الكلمات الأساسية التي تم تغييرها.
let database = 'gushici'
let condition = {
name: {
$regex:'.*'+ inputValue,
$options: 'i'
}
}
let { list, page, num } = this.data
let that = this
this.setData({
loading: true
})
// 模糊查询
wx.cloud.callFunction({
name: 'collection_get',
data: {
database,
page,
num,
condition
},
}).then(res => {
if (!res.result.data.length) {
that.setData({
loading: false,
isOver: true
})
} else {
let res_data = res.result.data
list.push(...res_data)
that.setData({
list,
loading: false
})
}
})
.catch(console.error)
مقالة مرجعية: استخدام طريقة Async/await للتعامل مع الطلبات غير المتزامنة في تطبيق WeChat الصغير
هناك طريقتان لتشغيل إعادة توجيه الصفحات في البرامج المصغرة:
open-type="share"
لمكون button
، يمكن تشغيل حدث Page.onShareAppMessage بعد أن ينقر المستخدم على الزر. إذا لم يتم تعريف هذا الحدث في الصفحة الحالية، فلن يكون هناك أي تأثير بعد ذلك النقر.يمكن للمستخدمين أيضًا تخصيص العنوان والصورة والمسار المعروض بعد إعادة التوجيه في حدث Page.onShareAppMessage:
onShareAppMessage(res) {
let id = wx.getStorageSync('shareId')
if (res.from === 'button') {
// 来自页面内转发按钮
console.log(res.target)
}
return {
title: `跟我一起挑战最长的成语接龙吧!`,
path: `pages/find/find`,
imageUrl: '/images/img.jpg',
}
},
لمزيد من التفاصيل، يرجى الرجوع إلى المقالة: ترخيص برامج WeChat Mini
من الواضح أن هناك بيانات في جدول البيانات، ولكن ما يحصل عليه موقع Collection.get فارغ. الحل: يمكنك فتح إعدادات أذونات قاعدة البيانات في وحدة تحكم التطوير السحابية وتعيين الأذونات.
يُرجع الاستدعاء الناجح للدالة Collection.update أنه تم تحديث 0 صفوف من السجلات، لأن التطبيق الصغير لا يسمح بتحديث البيانات بدون حقل openid. الحل: يمكن تحديث قاعدة البيانات من خلال الوظائف السحابية.
الحل: 1: قم بتحميل الصورة إلى الخادم واملأ عنوان مسار الصورة على الخادم. 2: تحويل الصورة إلى ترميز base64.
السبب: يرجى الاطلاع على المستند: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/import.html
الحل: قم بإزالة الفواصل بين {}
في بيانات json إذا كانت الطبقة الخارجية هي []
، فيجب إزالتها أيضًا، ويكون النموذج النهائي كما يلي:
{
"index": "作者_1",
"type": "作者",
"poet": "李白",
"abstract": "李白(701年-762年),字太白,号青莲居士,唐朝浪漫主义诗人,被后人誉为“诗仙”..."
}
{
"index": "作者_2",
"type": "作者",
"poet": "白居易",
"abstract": "白居易(772年-846年),字乐天,号香山居士..."
}