云开发与Nodejs
云函数的运行环境是 Node.js,我们可以在云函数中使用Nodejs内置模块以及使用 npm 安装第三方依赖来帮助我们更快的开发。借助于一些优秀的开源项目,避免了我们重复造轮子,相比于小程序端,能够大大扩展云函数的使用
云函数与Nodejs
技术文档:Nodejs API 中文技术文档
Nodejs的内置模块
Nodejs的常用内置模块以及功能如下所示,这些模块都是可以在云函数里直接使用的:
- fs 模块:文件目录的创建、删除、查询以及文件的读取和写入,下面的createReadStream方法类似于读取文件,
- path 模块:提供了一些用于处理文件路径的API
- url模块:用于处理与解析 URL
- http模块:用于创建一个能够处理和响应 http 响应的服务
- querystring模块:解析查询字符串
- until模块 :提供用于解析和格式化 URL 查询字符串的实用工具;
- net模块:用于创建基于流的 TCP 或 IPC 的服务器
- crypto模块:提供加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装
在云函数中使用HTTP请求访问第三方服务可以不受域名限制,即不需要像小程序端一样,要将域名添加到request合法域名里;也不受http和https的限制,没有域名只有IP都是可以的,所以云函数可以应用的场景非常多,即能方便的调用第三方服务,也能够充当一个功能复杂的完整应用的后端。不过需要注意的是,云函数是部署在云端,有些局域网等终端通信的业务只能在小程序里进行。
常用变量
module、exports、require
require用于引入模块、 JSON、或本地文件。 可以从 node_modules 引入模块,可以使用相对路径(例如 ./、)引入本地模块或 JSON 文件,路径会根据 __dirname 定义的目录名或当前工作目录进行处理。
node模块化遵循的是commonjs规范,CommonJs定义的模块分为: 模块标识(module)、模块导出(exports) 、模块引用(require)。
在node中,一个文件即一个模块,使用exports和require来进行处理。
Lodash实用工具库
Lodash是一个一致性、模块化、高性能的 JavaScript 实用工具库,通过降低 array、number、objects、string 等数据类型的使用难度从而让 JavaScript 变得更简单。Lodash 的模块化方法非常适用于:遍历 array、object 和 string;对值进行操作和检测;创建符合功能的函数。
技术文档:Lodash官方文档、Lodash中文文档
moment时间处理
开发小程序时经常需要格式化时间、处理相对时间、日历时间以及时间的多语言问题,这个时候就可以使用比较流行的momentjs了。
技术文档:moment官方文档、moment中文文档
获取公网IP
有时我们希望能够获取到服务器的公网IP,比如用于IP地址的白名单,或者想根据IP查询到服务器所在的地址,ipify就是一个免费好用的依赖,通过它我们也可以获取到云函数所在服务器的公网IP。
技术文档:ipify Github地址
Buffer文件流
图像处理sharp
sharp是一个高速图像处理库,可以很方便的实现图片编辑操作,如裁剪、格式转换、旋转变换、滤镜添加、图片合成(如添加水印)、图片拼接等,支持JPEG, PNG, WebP, TIFF, GIF 和 SVG格式。在云函数端使用sharp来处理图片,而云存储则可以作为服务端和小程序端来传递图片的桥梁。
技术文档:sharp官方技术文档
连接数据库MySQL
公网连接数据库MySQL
技术文档:Sequelize
私有网络连接MySQL
默认情况下,云开发的函数部署在公共网络中,只可以访问公网。如果开发者需要访问腾讯云的 Redis、TencentDB、CVM、Kafka 等资源,需要建立私有网络来确保数据安全及连接安全。
连接数据库Redis
二维码qrcode
技术文档:node-qrcode Github地址
邮件处理
技术文档:Nodemailer Github地址、Nodemailer官方文档
Excel文档处理
Excel是存储数据比较常见的格式,那如何让云函数拥有读写Excel文件的能力呢?我们可以在Github上搜索关键词“Node Excel”,去筛选Star比较多,条件比较契合的。
Github地址:node-xlsx
读取云存储的Excel文件
将数据库里的数据保存为CSV
技术文档:json2CSV
HTTP处理
got、superagent、request、axios、request-promise
尽管云函数的Nodejs版本比较低(目前为8.9),但绝大多数模块我们都可以使用Nodejs 12或13的环境来测试,不过有时候也要留意有些模块不支持8.9,比如got 10.0.1以上的版本。
node中,http模块也可作为客户端使用(发送请求),第三方模块request对其使用方法进行了封装,操作更方便!所以来介绍一下request模块
get请求
post请求
结合文件流
加解密Crypto
crypto模块是nodejs的核心模块之一,它提供了安全相关的功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。由于crypto模块是内置模块,我们引入它是无需下载,就可以直接引入。
发短信
“qcloudsms_js”: “^0.1.1”