扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关wafer2如何实现轻松部署小程序后端,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
公司主营业务:网站制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出西盟免费做网站回馈大家。
前端程序员开发一个自己的小程序,比起学习小程序开发,更大的难点在于搭建小程序的后台。
本文从一个初学者的角度,简单介绍一下腾讯云推出的小程序解决方案 wafer2,让没有后台开发经验的程序员,也能搭建起自己的小程序后台。
后台的搭建涉及到购买服务器、购买数据库,然后要在服务器上安装运行环境等。说实话,我连要在服务器上装什么都不知道。所以希望能有一个东西,帮我把这些都做好,要是再提供一些登录之类的常用接口就更好了。这就是 wafer 所做的。
其实在小程序后台配置域名的地方,就有跳转到腾讯云的链接:
进入后按照指引购买,就可以拥有一个配置好的后台。
wafer 相对于自己搭建后台已经方便很多了,但我用起来还是感觉有难度。我不熟悉 Linux,也搞不懂如何测试代码。直到发现腾讯云又推出了 wafer2。
如果你用上了新版小程序开发工具,会在工具的右上角发现一个「腾讯云」的按钮:
这个按钮就是用来连接 wafer2 的。
我们可以直接在小程序开发工具里编写后台代码,并上传代码,后台是区分开发环境和生产环境的。
下面我们看看怎么使用 wafer2。
搭建 wafer2 很简单,大家按照官方文档来,应该没什么问题的,这里就不赘述了。
官方文档说的都是开发环境,要是你想部署到生产环境,有些配置需要改一下。
开发环境的域名是腾讯云分配的 xxx.qcloud.la,而生产环境需要使用自己在腾讯云里的域名。
通过腾讯云管理中心注册的域名,会自动部署 HTTPS 证书。但是要备案的话,需要登记服务器 ip,而 wafer2 的服务器 ip 是没有提供给我们的。目前备案只能再买一个服务器……
绑定域名后,可以在开发工具「详情」-「腾讯云状态」确认生产环境域名:
切换到生产环境后,别忘了把客户端的接口域名也改一下。
在腾讯云管理中心里,修改生产环境 MySQL 的登录密码。然后登录 phpMyAdmin,在首页可以看到 MySql 的服务器 ip 地址,记下来。
回到开发工具,找到 server/config.js,修改里面 MySql 配置的 ip 地址及登录密码:
mysql: { host: '修改为生产环境 ip', port: 3306, user: 'root', db: 'cAuth', pass: '修改为生产环境密码', char: 'utf8mb4' },
在开发工具上传正式代码,再到管理中心的生产环境,点击「代码部署」。这样就完成生产环境的配置及部署了。
比外需要注意,开发环境的 MySql 是 5.7 的,而生产环境是 5.6 的。注意不要在开发的时候使用 JSON 等 MySql 5.7 才有的功能。
先说一下小程序基本都会用到的登录。
wafer2 的客户端及服务端 sdk,已经集成了登录逻辑,在客户端引用 sdk 后,只要调用它的 login 方法就可以实现登录了:
qcloud.login({ success: res => { console.log('登录成功', res) }, fail: err => { console.log('登录失败', err) } })
登录成功会将用户数据保存在数据库 cAuth 的 cSessionInfo 表里,并将用户数据返回。
看起来很美好,但是这里面是存在一些问题的。
用户登录过之后会将用户信息缓存在本地,当有缓存的时候会将用户信息直接返回。但是 sdk 中,缓存的存取都是有问题的,有缓存的情况下,会返回 undifined。
这是个很低级的错误,问题已经给官方反馈了。截止到写这篇文章,取数据的地方改了,但存的地方还没改……
所以现在要正常使用,需要到 wafer2-client-sdk/lib/login.js,找到保存用户数据的地方:
Session.set(res.skey);
修改为:
Session.set(res);
另外,还想吐槽一下,sdk 里 wx.login 和 wx.getUserInfo 是搭配使用的。
也就是说,必须要获取到用户信息,才能实现登录。而我们知道,小程序在获取用户信息时会弹窗,并且用户是可以拒绝的。拒绝后一段时间内,调用 wx.getUserInfo 都不会再弹窗。可以说 wafer2 没有考虑用户拒绝授权的情况。而这恰好是微信不提倡的做法,甚至可能导致无法通过审核。
这个问题我也向官方反馈了。
学习要有目的性才能保持兴趣,配置完了我们来写一个自己的接口。
wafer2 基于 Node.js 平台,使用了 Koa2 框架。
在 server/controllers 下新建文件 hello.js,输入如下代码:
module.exports = async ctx => { ctx.state.data = "Hello World !" }
代码很简单,就是暴露一个返回结果是「Hello World !」的方法,「Hello World !」会被放在请求结果的 data 里。
然后我们打开 server/routes/index.js
添加一句代码:
// 测试接口 router.get('/hello', controllers.hello)
代码就只有这么多。保存之后点击「腾讯云」-「上传测试代码」,如果是第一次上传要勾上「部署后自动安装依赖」。等待上传成功,就可以测试我们的接口了。
调用 xxx.qcloud.la/weapp/hello,看是否返回以下结果:
{ code: 0, data: "Hello World !" }
恭喜!你自己开发的第一个接口已经调通了!
wafer2 使用了 knex 作为数据库的查询构造器,并且已经配置好了。对于有 sql 经验的程序员,可以很快的上手。
我们可以在 phpMyAdmin 里,在 cAppinfo 这个数据库里创建需要的表。
假如已经有一个「Book」的表,下面代码,简单展示了在 wafer2 里,如何对数据库进行增查改删:
const { mysql } = require('../qcloud') const uuid = require('node-uuid') module.exports = async ctx => { var id = uuid.v1() // 增 var book = { id: id, name: "冰与火之歌", price: 88 } await mysql("Book").insert(book) // 查 var res = await mysql("Book").where({ id }).first() // 改 await mysql("Book").update({ price: 66 }).where({ id }) // 删 await mysql("Book").del().where({ id }) ctx.state.data = "OK" }
数据库操作默认都是异步执行的,如果要等待操作完成,需要在操作语句前加上 await。
关于wafer2如何实现轻松部署小程序后端就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流