APICloud是一个面向移动端的云服务平台,提供了一整套移动应用开发的解决方案,包括前端UI库、开发工具、后端云服务、数据存储、推送服务等等。APICloud使用JavaScript作为开发语言,同时支持Android和iOS系统的开发,非常适合中小企业和个人开发者使用。而今天我们要介绍的则是使用APICloud开发的美食App源码。
一、源码介绍
这个美食App主要包含两个部分,一个是前端界面,另一个则是后端服务。前端界面使用了APICloud官方提供的UI库,包括底部导航、轮播图、图片列表等等。后端服务则使用了APICloud提供的云函数和数据服务,包括用户登录、餐厅列表查询、餐厅详情查询等等。该App主要功能如下:
1.用户登录注册功能
2.餐厅列表浏览功能
3.餐厅搜索功能
4.餐厅详情查看功能
5.订单提交功能
二、源码使用说明
1.下载后解压缩源码,使用APICloud Studio打开
2.在APICloud控制台中创建应用,获取App Id和App Key,在config.xml中进行配置
```
...
...
```
3.在APICloud控制台中创建数据库,获取App Id和Master Key,在APICloud云函数中进行配置
```
APICloud.init({
appId: "A123456789",
appKey: "your app key"
});
APICloud.Cloud.useMasterKey = true;
```
4.安装APICloud模块,在终端中执行`npm install`,然后打包上传到APICloud云端进行部署即可
三、源码分析
1.用户登录注册功能
用户登录注册功能涉及到用户信息的存储和查询,主要使用了APICloud提供的存储服务。用户注册成功后将用户信息存储到数据库中,登录时根据用户名和密码查询数据库中是否存在对应信息。
```
//注册
APICloud.Cloud.run('user_register', {
username: username.value,
password: password.value,
phone: phone.value
}, function(ret, err) {
if (ret) {
alert('注册成功');
api.closeWin();
} else {
alert('注册失败,请重新输入');
}
});
//登录
APICloud.Cloud.run('user_login', {
username: username.value,
password: password.value
}, function(ret, err) {
if (ret) {
api.setPrefs({
key: 'username',
value: ret.username
});
api.setPrefs({
key: 'phone',
value: ret.phone
});
api.openWin({
name: 'index',
url: '../html/index.html',
pageParam: {
username: ret.username,
phone: ret.phone
}
});
} else {
alert('登录失败,请重新输入');
}
});
```
2.餐厅列表浏览功能
餐厅列表浏览功能主要是一个图片列表,每个图片都对应着一个餐厅。图片的展示使用了APICloud提供的mcm.ui.gridImgView控件,餐厅列表的数据从数据库中查询得到。
```
mcm.findAll({
class: 'restaurant_list'
}, function(res) {
var data = [];
for (var i = 0; i < res.length; i++) {
data.push({
imgPath: res[i].restaurant_img,
title: res[i].restaurant_name
});
}
mcm.ui.gridImgView({
rect: {
x: 0,
y: api.safeArea.top+api.frameHeight*0.15,
w: api.frameWidth,
h: api.frameHeight*0.85
},
data: data,
imgSize: 150,
gap: 10,
click: function(index) {
api.openWin({
name: 'detail',
url: '../html/detail.html',
pageParam: {
id: res[index]._id
}
});
}
});
});
```
3.餐厅搜索功能
餐厅搜索功能涉及到关键字的匹配查询,主要使用了APICloud提供的云函数和数据服务。用户输入关键字后,调用云函数进行模糊查询,然后在前端展示查询结果。查询结果的展示方式使用了APICloud提供的mcm.ui.gridImgView控件。
```
APICloud.Cloud.run('restaurant_search', {
name: search.value
}, function(res, err) {
if (res.length == 0) {
alert('查询结果为空');
} else {
var data = [];
for (var i = 0; i < res.length; i++) {
data.push({
imgPath: res[i].restaurant_img,
title: res[i].restaurant_name
});
}
mcm.ui.gridImgView({
rect: {
x: 0,
y: api.safeArea.top+api.frameHeight*0.15,
w: api.frameWidth,
h: api.frameHeight*0.85
},
data: data,
imgSize: 150,
gap: 10,
click: function(index) {
api.openWin({
name: 'detail',
url: '../html/detail.html',
pageParam: {
id: res[index]._id
}
});
}
});
}
});
```
4.餐厅详情查看功能
餐厅详情查看功能涉及到对餐厅信息的展示,包括餐厅名称、联系电话、地址、介绍等。同时还包括一个立即预定的按钮,点击后可以跳转到订单提交页面。
```
mcm.findById({
class: 'restaurant_list',
id: id
}, function(res) {
restaurant_name.innerHTML = res.restaurant_name;
restaurant_phone.innerHTML = res.restaurant_phone;
restaurant_address.innerHTML = res.restaurant_address;
restaurant_desc.innerHTML = res.restaurant_desc;
});
order.addEventListener('click', function() {
api.openWin({
name: 'order',
url: '../html/order.html',
pageParam: {
id: id
}
});
});
```
5.订单提交功能
订单提交功能主要涉及到对用户订单的存储和查询,以及对餐厅库存的处理。用户订购成功后,订单信息将被存储到数据库中并减少对应餐厅的库存量。
```
APICloud.Cloud.run('order_create', {
username: api.getPrefs({
sync: true,
key: 'username'
}),
phone: api.getPrefs({
sync: true,
key: 'phone'
}),
restaurant_id: id,
restaurant_name: restaurant_name.innerHTML,
order_time: new Date().getTime(),
order_num: parseInt(order_num.value),
order_price: parseInt(order_num.value) * 50
}, function(res, err) {
if (res) {
alert('下单成功');
//更新餐厅库存
mcm.findById({
class: 'restaurant_list',
id: id
}, function(res) {
mcm.update({
class: 'restaurant_list',
id: id,
data: {
restaurant_num: res.restaurant_num - parseInt(order_num.value)
}
}, function(ret) {});
});
api.closeWin({
name: 'order'
});
} else {
alert('下单失败,请重新输入');
}
});
```
四、源码总结
使用APICloud开发移动应用具有代码简洁、开发效率高等优势,特别适合快速迭代的中小型项目。本文介绍的美食App源码主要涵盖了APICloud的核心技术,包括前端UI库、云函数、数据存储、推送服务等等,具有一定的参考价值。