收藏
回答

云开发用的云函数中调用mysql日志一直报调用失败?

背景:云开发、云函数。由于云开发的db操作实在太麻烦,于是采用了自己搭建的mysql。然后小程序通过请求云函数,云函数再连接mysql获取需要的数据。

问题:云函数连接mysql获取到数据,前端显示日志正常,但云开发的云函数日志却显示调用失败。同样的requestID! 截图如下:

代码片段:

const cloud = require('wx-server-sdk')
//引入mysql操作模块
const mysql = require('mysql2/promise')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
exports.main = async (event, context) => {
  //链接mysql数据库,这里你可以链接你mysql中的任意库
  try {
    const wxContext = cloud.getWXContext()
    const openid = wxContext.OPENID
    const connection = await mysql.createConnection({
      host: "220.248.*.*",
      database: "bv_xxx",
      port: 3306,
      user: "username",
      password: "pwd***"
    })
    console.log('event=', event)
    var offset = event.offset ? event.offset : 0;
    var pageSize = event.pageSize ? event.pageSize : 20;
    var apiType = event.apiType;
    //1:获取文章列表
    //2:获取视频列表
    //3:收藏列表
    //4:收藏/取消收藏
    switch (apiType) {
      case 1: //获取文章列表
        var sql = 'select ar.*,(select count(1) from bv_collect where openid=\"' + openid + '\" and aid=ar.id) as collect from bv_article ar where ar.is_delete = 0 order by ar.create_time desc limit ' + offset + ',' + pageSize + ';'
        console.log('sql=', sql)
        var [rows, fields] = await connection.execute(sql)
        // console.log('rows=', rows)
        return rows;
      case 2: //获取视频列表
        var sql = 'select * from bv_video where is_delete = 0 order by create_time;'
        var [rows, fields] = await connection.execute(sql)
        // console.log('rows=', rows)
        return rows;
    }
    return '格式错误'
  } catch (err) {
    console.log("链接错误", err)
    return err
  }
}

最后一次编辑于  2020-06-28
回答关注问题邀请回答
收藏

4 个回答

  • 云开发技术产品经理-Zira
    云开发技术产品经理-Zira
    2020-06-28

    你好,错误提示超过3秒,建议你增加云函数的限制运行时间

    2020-06-28
    有用
    回复 3
    • 大胡子
      大胡子
      2020-06-29
      我增加了,但是最少只能设置1s,不解决根本问题
      2020-06-29
      回复
    • 云开发技术产品经理-Zira
      云开发技术产品经理-Zira
      2020-06-29回复大胡子
      将运行时间设置大,在10s之上。如果是偶发性问题,建议优化mysql的查询链接
      2020-06-29
      回复
    • 大胡子
      大胡子
      2020-06-29回复云开发技术产品经理-Zira
      这个不是sql查询的问题,因为小程序端可以很快拿到数据,而且数据正常。主要问题在云开发后台日志为什么显示调用失败,而前端是正常拿到数据的
      2020-06-29
      回复
  • 春去又春来
    春去又春来
    星期六 16:01

    云函数入口函数后插入:context.callbackWaitsForEmptyEventLoop = false
    但是不知道这句是什么意思,起什么作用。现在日志提示调用成功了。
    望大神解释下这句代码的作用。
    
    星期六 16:01
    有用
    回复
  • sun
    sun
    03-07
    你好,我想问一下 在云函数里console.log 怎么看到自己打印的东西呀
    我想了想 如果不返回到return  自己怎么看到呀
    


    03-07
    有用
    回复
  • withnate
    withnate
    2020-06-29

    麻烦重试下,提供一个最新的requestId。

    2020-06-29
    有用
    回复 5
    • 大胡子
      大胡子
      2020-06-30
      好的,最新的requestId:66cbb7bd-ba77-11ea-b6b4-5254007c2bc0
      2020-06-30
      回复
    • withnate
      withnate
      2020-06-30回复大胡子
      云函数运行时切换到nodejs 8.9 试试
      2020-06-30
      回复
    • 大胡子
      大胡子
      2020-06-30回复withnate
      非常感谢,解决问题了,的确是加上代码
      2020-06-30
      1
      回复
    • Bo
      Bo
      2020-07-24回复大胡子
      你好 请问以下这一句代码具体是加在哪里
      2020-07-24
      回复
    • 大胡子
      大胡子
      2020-07-24
      代码的开头
      2020-07-24
      3
      回复
登录 后发表内容
问题标签