如何快速新建路由

服务端 Demo 采用 Koa.js 框架编写,腾讯云基于 Koa 对上层进行一个简单的封装,方便你快速的添加新建路由

只需要在 controllers 目录下新建一个文件,例如为 demo.js,写入如下代码:

module.exports = function (ctx, next) {
ctx.state.data = { msg: 'Hello World' }
}

保存之后,接着在 routes/index.js 的 module.exports = router 之前添加如下路由并保存:

router.get('/demo', controllers.demo)

接着点击右上角的“腾讯云”按钮,选择“上传测试代码”,勾选“智能上传”,点击确定即可上传并部署代码,等到提示开发环境部署成功了之后,打开浏览器,访问 https://腾讯云分配的域名/weapp/demo,即可看到刚刚编写的返回,是一个 JSON 字符串:

{"code":0,"data":{"msg":"Hello World"}}

如何使用服务端 SDK 连接和操作数据库

服务端 SDK 还暴露出了内部使用的 MySQL 连接,由于 SDK 内部使用 Knex.js 连接数据库,SDK 暴露的 MySQL 实例就是 Knex.js 连接实例,具体使用方法可以查看 Knex.js 文档

const { mysql } = qcloud

mysql('db_name').select('*').where({ id: 1 }) // => { id:1, name: 'leo', age: 20 }

数据库增删改查

腾讯云SDK是用Knex操作MySQL的,它已经帮我们配置了一个knex的实例,包括在config.js里填写的用户名,密码等,所以这个实例可以引用出来直接用。因为腾讯云没给操作数据库的demo,所以我自己试了一下。

我的思路是:客户端post请求(包含了数据),经过服务端路由,然后用这个Knex实例操作数据库,最后返回结果。

服务端

添加路由

首先,在/server/routes/index.js中新添4行:

router.post('/mysql/insert', controllers.database.insertRecord); //增添
router.post('/mysql/delete', controllers.database.deleteRecord); //删除
router.post('/mysql/update', controllers.database.updateRecord); //更新
router.post('/mysql/select', controllers.database.selectRecord); //查询

添加增删改查函数

首先取得Knex实例的引用:

const { mysql } = require('../qcloud.js');

然后定义4个函数,分别对应增、删、改、查,并将它们导出。这些函数是异步函数,要使用async/await关键字,因为使用数据库是耗时操作。

const tableName = 'demo';
const keyField = 'myKey';
const valueField = 'myValue'; async function insertRecord(ctx) { ... }
async function deleteRecord(ctx) { ... }
async function updateRecord(ctx) { ... }
async function selectRecord(ctx) { ... } module.exports = {
insertRecord,
deleteRecord,
updateRecord,
selectRecord,
};

比如,function insertRecord(ctx)是这么写的:

async function insertRecord(ctx) {
var obj = ctx.request.body;
// 查询是否键重复
await mysql(tableName)
.select()
.where(JSON.parse(`{"${keyField}":"${obj.key}"}`))
.then(async function(res) {
// 插入记录
if(!res.length) {
await mysql(tableName)
.insert(JSON.parse(`{"${keyField}":"${obj.key}","${valueField}":"${obj.value}"}`))
.then(function(res) {
ctx.state.data = {
code: 0,
message: "ok",
};
});
}
// 查询得知已有该键
else {
ctx.state.data = {
code: 1,
message: "key already exists",
}
}
})
}

这里核心是Knex的query builder,也就是用insert()delete()update()select()where()等函数构造出完整的MySQL语句。这些链式调用返回JavaScript的Promise,最后用.then(success, fail)结尾,两个参数分别是Promise被解决(resolve)或拒绝(reject)的回调函数。

Koa中间件支持async/await。所以最好用async关键词,然后在数据库操作前写上await。我试过,如果不写的话,会出现客户端收不到响应,

删、改和查也都是类似的。

客户端

setCloudStorage: function() {
var key = this.dbtest.keyInput1;
var data = this.dbtest.dataInput1;
var obj = {
key: key,
value: data,
};
qcloud.request({
url: `${config.service.host}/weapp/mysql/insert`,
method: "POST",
data: obj,
login: false,
success(result) {
console.log(result.data.data);
if(result.data.data.code == 0)
util.showSuccess('请求成功');
else
util.showModel('数据库操作失败', result.data.data.message);
},
fail(error) {
util.showModel('请求失败', error);
},
});
}

这个qcloud是从SDK引出来的。qcloud.request()wx.request()的一个封装,差不多的。主要是要设置好正确的URL,选择用POST还是GET方法,然后把数据塞进去,然后设置一下成功和失败之后的回调函数。

另外第11行的data必须是个Object,字符串试了一下不行。

删、改和查也都是类似的。

参考链接:

1. https://blog.majinyu.xyz/index.php/weapp/operate-mysql-with-wafer2/

wafer2的几个简单示例的更多相关文章

  1. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  2. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  3. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  5. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  6. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  7. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

  8. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

  9. XML引入多scheme文件约束简单示例

    XML引入多scheme文件约束简单示例,用company.xsd和department.xsd来约束company.xml: company.xsd <?xml version="1 ...

随机推荐

  1. a迭代尾声处理

    这是小组开发a阶段迭代的成员工具teambition,现阶段a迭代需要最后的整合,同时我们也在开始了b迭代过程,并不断完善在开发工程中我们文档方面的记录

  2. 【Oracle】常用的SQL语句

    抄自:https://www.cnblogs.com/qiu18359243869/p/9474515.html 提示:dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里 ...

  3. Android 中的AlertDialog使用自定义布局

    Android使用指定的View开发弹窗功能 Android开发中进程会使用到我们的AlertDialog,但是比较可惜的是我们的Android原生的AlertDialog的效果又比较的简陋,这个时候 ...

  4. 【LGR-061】洛谷10月月赛 II & X Round 4 Div.1&Div 2

    X Round的题目质量还是一如既往的高 然而每次周末我都要写作业没法用心打233主要是被陈指导放了鸽子 占坑代填(最近坑开的有点多)

  5. Windows安装与配置—MongoDB

    1,下载安装 打开下载链接:http://dl.mongodb.org/dl/win32/x86_64,选择后缀是2008plus-ssl-3.6.15.zip的版本,32位和64位通用. 2,安装配 ...

  6. 【转】oracle中的NULL、''(空字符串)以及'_'(空格)

    在Oracle中使用null,''(空字符串),'_'(空格)时,有没有遇到问题?产生疑惑? 1.NULL和''(空字符串)是一个意思 注:为了便于区分空字符串和空格,下面的示例均以'_'代表空格. ...

  7. Python的定时执行

    最近手把手教妹子写Python,被一篇博客误导了,这里记录一下. 妹子需要的是一个定时闹钟,到点往钉钉群里推个消息.她一顿搜索猛如虎,参照着其他人的博客,搞了一个while: target_time ...

  8. 代码生成工具Database2Sharp的架构介绍

    1)代码生成工具介绍 Database2Sharp是一款代码生成工具和数据库文档生成工具,该工具从2005年开始至今,一直伴随着我们的客户和粉丝们经历着过各种各样的项目开发,在实际开发中能带来效率的提 ...

  9. Koa 中间件的执行

    Node.js 中请求的处理 讨论 Koa 中间件前,先看原生 Node.js 中是如何创建 server 和处理请求的. node_server.js const http = require(&q ...

  10. Java反射及注解

    一.反射 1.动态语言:是指程序在运行是可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见的JavaScript就是动态语言,除此以外Python等也属于动态语言,而C.C ...