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 애플릿에서 비동기 요청 처리
미니 프로그램에서 페이지 전달을 트리거하는 방법에는 두 가지가 있습니다.
button
구성 요소에 open-type="share"
속성을 설정하면 사용자가 버튼을 클릭한 후 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 함수에 대한 성공적인 호출은 애플릿이 openid 필드 없이 데이터 업데이트를 허용하지 않기 때문에 0개의 레코드 행이 업데이트되었음을 반환합니다. 솔루션: 클라우드 기능을 통해 데이터베이스를 업데이트할 수 있습니다.
해결 방법: 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年),字乐天,号香山居士..."
}