最近使用uniapp写一个小程序的项目,解决了一个很有意思的需求,就是扫描书籍的ISBN跳转详情页面,获取当前书籍信息。涉及到以下知识,uniCloud云开发、小程序API使用等。
实现思路:
其实比较简单,每本书后面都一个二维码,这个二维码包含了这个本书的ISBN(国际标准书号,简称ISBN),然后我们只需要通过这个ISBN获取到当前书籍的信息然后存入数据库,最后展示出来就行了。
1.使用微信小程序提供API-wx.scanCode()获取版号ISBN
接口文档
wx.scanCode({
success: (res) => {
console.log(res);
})
2.获取到版号后如何获取到当前书籍信息呢,这里大家可以在网上找找相应的接口,传递参数就可以获取当前书籍信息。
uni.request({
url: `http://47.99.80.202:6066/openApi/getInfoByIsbn?isbn=${res.result}&appKey=ae1718d4587744b0b79f940fbef69e77`,
method: 'GET',
success: (res) => {
uni.showToast({
title:'正在跳转详情页面',
icon:'loading'
})
3.将获取到的书籍信息(cover、name、author、summay等)增加到数据库当中,并且携带id值跳转详情页面。
uniCloud.callFunction({
name:'setBook',
data:{
// author1:'鲁迅'
name:res.data.data.bookName,
author:res.data.data.author,
cover:JSON.parse(res.data.data.pictures)[0],
summary:res.data.data.bookDesc
},
success:(res)=>{
uni.navigateTo({
url:`/pages/detail/detail/detail?id=${res.result.data[0]._id||res.result.id}&type=1`
})
}
})
uniCloud云函数代码,这里需要做一个判断,判断书籍库中是否存在这本书,避免重复扫码,多次录入书籍。
const db = uniCloud.database()
const dbCmd=db.command
exports.main = async (event, context) => {
let {cover,name,author,summary}=event
let same = await db.collection('book').where({
author:dbCmd.eq(author)
}).count()
console.log(same)
// 判断数据库中是否存在当前数据
if (same['total'] == 0) {
let res=await db.collection('book').add({
name,
cover,
author,
summary
})
return res
} else {
let result=await db.collection('book').where({
cover:dbCmd.eq(cover)
}).get()
return result
}
};