专栏首页小程序·云开发专栏云函数之间互相调用实现邮件发送
原创

云函数之间互相调用实现邮件发送

很多时候,我们会面临在小程序的后台实现多重功能,比如用户管理、日志分析、数据排序等,不同的功能之间还会相互调用。如果把这些功能都写到一个云函数里,会造成云函数逻辑过于复杂,执行速度较慢等问题。此时,我们可以使用微信提供的SDK “wx-server-sdk” ,很方便的实现函数之间的调用。把功能函数拆分成一个个独立的云函数,会有很多好处:

  1. 尽可能的利用每个函数的并发能力。在小程序云开发中,每个函数都有自己默认的函数并发限制,如果把函数功能都写在一起,会很快的耗尽该函数的并发能力(函数并发=QPS*函数执行时间(秒))。
  2. 降低云函数的维护成本。如果某个云函数出错了,并不会影响到其他云函数的使用;而且如果想对某个函数做修改,也更加方便。
  3. 提升资源的使用效率。云函数的收费,调用次数是很便宜的,贵的是GBS(内存*时间);尽可能的降低函数执行时间,也能节省一定的成本。另外,根据用户的经验来看,云函数的超时时间也要尽可能的设置的小一点。比如在云函数里执行数据库的操作,如果出现了慢查询(索引没有建立好、单次查询数据过大等),会很快耗尽函数的并发,进而导致服务受损。

本文会举例如何使用SDK,快速实现函数之间的调用,并实现邮件发送。

首先,我们创建函数test,在test云函数中发起对sendmail云函数的调用;

test函数的代码如下:

  • index.js
const cloud = require('wx-server-sdk')
cloud.init({
  env: 'test-demo-id'   //环境初始化
})
// 云函数入口函数
exports.main = async (event, context) => {
  console.log("Start to test")
 return await cloud.callFunction({
    name:'sendmail',
  })
}
  • package.json
{
 "name": "test",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
  },
 "author": "",
 "license": "ISC",
 "dependencies": {
 "wx-server-sdk": "latest"  //在此处注明要使用的微信SDK,上传云函数的时候后台可以自动部署
  }
}

在微信IDE里右键选择“上传并部署(云端安装依赖)”

sendmail函数的代码如下:

  • index.js
// 云函数入口文件
const nodemailer = require("nodemailer");
var transporter = nodemailer.createTransport({
  service: 'qq',
  port: 465,               // SMTP 端口
  secure: true,            // 使用 SSL
  auth: {
    user: 'xxxx@qq.com',   //发邮件邮箱
    pass: '*******'        //此处不是qq密码是
  }
});
var mailOptions = {
 from: 'xxxxxxx@qq.com',   // 发件地址
  to: 'xxxxxxxx@qq.com',    // 收件列表
  subject: '测试云函数',      // 标题
  text: '测试云函数'
};

// 云函数入口函数
exports.main = async (event, context) => {
  console.log("Start to sendemail")
 //开始发送邮件
 const info = await transporter.sendMail(mailOptions);
  console.log('Message sent: ' + info.response);
 return info
}
  • package.json
{
 "name": "sendmail",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
  },
 "author": "",
 "license": "ISC",
 "dependencies": {
 "wx-server-sdk": "latest",
 "nodemailer":"^4.7.0"    //在此处注明要使用的nodemailer库,上传云函数的时候后台可以自动部署
  }
}

需要修改下index.js里的邮箱地址,然后在微信IDE里右键选择“上传并部署(云端安装依赖)”。

前往“云开发”控制台进行测试:

选中“test”函数,点击右上角的测试按钮,查看效果:

添加描述

添加描述

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用 Serverless 云函数 + ffmpeg 实现音视频转码服务

    Serverless 已经成为近期热度越来越高的技术,众所周知,Serverless 的核心是帮用户屏蔽了底层的资源、提供按需请求、按需使用、按需付费的一种全新...

    Mason-Serverless
  • 谈谈自己的理解:python中闭包,闭包

    闭包这个概念好难理解,身边朋友们好多都稀里糊涂的,稀里糊涂的林老冷希望写下这篇文章能够对稀里糊涂的伙伴们有一些帮助~

    py3study
  • 从零开始深度学习(三):逻辑回归

    文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever

    我是管小亮
  • 19. 再说函数~那些不得不知道的事儿

    前面的课程中,我们已经对函数有了简单的了解 函数的声明、函数的的调用、函数的参数以及返回值等等

    大牧莫邪
  • 吴恩达深度学习笔记 2.3 logistic回归损失

    损失函数测量预测(p()和期望输出(y()之间的差异。换句话说。损失函数计算单个培训示例的错误。

    Dar_Alpha
  • 详解javascript中的即时函数,内部函数,能重写自身的函数即时函数内部函数返回函数的函数能重写自己的函数小结

    在上篇谈到匿名函数和回调函数的基础上,我们接着介绍javascript中的即时函数,内部函数,返回函数的函数,能重写自身的函数等几种常见的函数类型及使用方法。只...

    desperate633
  • TCB系列学习文章——云开发的云函数篇(四)

    云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。云开发中的云函数可让用户将自身的业务逻辑代码上传,并通过云开发的调...

    F颜
  • (1)James Stewart Calculus 5th Edition:Functions and Models

    dodo_lihao
  • 聊一聊编程中的函数

    给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表...

    算法与编程之美
  • Python之函数编程(2)

    在上面的命令中,我们定义一个return_sum()的函数,这个函数返回一个sum的函数,sum函数的作用是求一个可迭代对象的所有元素的和,当我们直接调...

    AsiaYe

扫码关注云+社区

领取腾讯云代金券