• wafer2的几个简单示例


    如何快速新建路由

    服务端 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/

  • 相关阅读:
    docker知识3---镜像
    docker知识2---docker简介
    docker知识1---容器背景
    docker故障排查
    linux故障处理--ssh故障
    sqlalchemy的一行代码更新数据库
    Python内置函数和高阶函数(map,filter,reduce, sorted,enumerate, zip,单行条件语句 )
    Mysql略复杂命令总结
    pip的使用
    Linux的基础命令
  • 原文地址:https://www.cnblogs.com/lfri/p/11938224.html
Copyright © 2020-2023  润新知