在微信小程序云开发中,云函数是一个非常重要的概念,它允许开发者编写Node.js函数,并在特定的触发条件下运行这些函数。云函数可以用于处理业务逻辑、数据存储、消息推送等各种场景。

示例一:创建和调用简单的云函数

创建云函数

  1. 打开微信开发者工具:确保你已经创建了一个微信小程序项目,并启用了云开发。
  2. 新建云函数

    • 在微信开发者工具中,选择“云开发”菜单项。
    • 点击“云函数”选项。
    • 点击“新建函数”,填写函数名(例如:hello),选择运行环境(默认即可)。
  3. 编写云函数代码

    • 在新建的云函数目录中,找到并打开index.js文件。
    • 编写如下代码:
    exports.main = async (event, context) => {
      return {
        event,
        openid: event.openid,
        appid: event.appid,
        ip: event.clientIP,
        unionid: event.unionid,
        message: 'Hello from cloud function!'
      };
    };

调用云函数

  1. 在小程序端调用云函数

    • 在小程序的某个页面中,例如index.js,编写如下代码:
    Page({
      data: {},
      onLoad: function(options) {
        this.callCloudFunction();
      },
      callCloudFunction: async function() {
        try {
          const result = await wx.cloud.callFunction({
            name: 'hello',
            data: {}
          });
          console.log(result.result);
        } catch (err) {
          console.error(err);
        }
      }
    });

示例二:使用云函数处理用户注册与登录

创建云函数

  1. 新建云函数:例如,创建一个名为register的云函数。
  2. 编写云函数代码

    • register云函数的index.js文件中,编写如下代码:
    const db = wx.cloud.database();
    
    exports.main = async (event, context) => {
      try {
        // 假设 event 中包含了用户提交的数据
        const { username, password } = event;
    
        // 检查用户是否已存在
        const checkResult = await db.collection('users').where({
          username
        }).get();
        if (checkResult.data.length > 0) {
          throw new Error('User already exists');
        }
    
        // 保存用户信息(假设 hashPassword 是一个加密函数)
        await db.collection('users').add({
          data: {
            username,
            password: hashPassword(password),
            createdAt: new Date()
          }
        });
        return {
          success: true,
          message: 'User registered successfully'
        };
      } catch (err) {
        return {
          success: false,
          error: err.message || 'Unknown error'
        };
      }
    };

调用云函数

  1. 在小程序端调用云函数

    • 在用户注册页面中,例如register.js,编写如下代码:
    Page({
      data: {},
      formSubmit: async function(e) {
        const { username, password } = e.detail.value;
    
        try {
          const result = await wx.cloud.callFunction({
            name: 'register',
            data: {
              username,
              password
            }
          });
          console.log(result.result);
          if (result.result.success) {
            wx.showToast({
              title: '注册成功',
              icon: 'success'
            });
          } else {
            wx.showToast({
              title: result.result.error,
              icon: 'none'
            });
          }
        } catch (err) {
          console.error(err);
        }
      }
    });

示例三:使用云函数处理文件上传

创建云函数

  1. 新建云函数:例如,创建一个名为uploadFile的云函数。
  2. 编写云函数代码

    • uploadFile云函数的index.js文件中,编写如下代码:
    exports.main = async (event, context) => {
      try {
        const { filePath, filename, contentType } = event;
    
        // 上传文件
        const fileResult = await wx.cloud.uploadFile({
          cloudPath: filename,
          filePath,
          maxTime: 60,
          timeout: 60,
          success: function(res) {
            console.log(res.fileID);
          },
          fail: function(err) {
            console.error('Upload failed:', err);
          }
        });
    
        // 保存文件信息到数据库
        const db = wx.cloud.database();
        await db.collection('files').add({
          data: {
            fileID: fileResult.fileID,
            filename,
            uploadedAt: new Date(),
            contentType
          }
        });
    
        return {
          success: true,
          fileID: fileResult.fileID
        };
      } catch (err) {
        return {
          success: false,
          error: err.message || 'Unknown error'
        };
      }
    };

调用云函数

  1. 在小程序端调用云函数

    • 在文件上传页面中,例如upload.js,编写如下代码:
    Page({
      data: {},
      chooseImage: function() {
        wx.chooseImage({
          count: 1,
          sizeType: ['original', 'compressed'],
          sourceType: ['album', 'camera'],
          success: (res) => {
            const tempFilePaths = res.tempFilePaths;
            const fileName = tempFilePaths[0].split('/').pop();
            this.uploadFile(tempFilePaths[0], fileName);
          }
        });
      },
      uploadFile: async function(filePath, fileName) {
        try {
          const result = await wx.cloud.callFunction({
            name: 'uploadFile',
            data: {
              filePath,
              filename: fileName,
              contentType: 'image/jpeg'
            }
          });
          console.log(result.result);
          if (result.result.success) {
            wx.showToast({
              title: '上传成功',
              icon: 'success'
            });
          } else {
            wx.showToast({
              title: result.result.error,
              icon: 'none'
            });
          }
        } catch (err) {
          console.error(err);
        }
      }
    });

注意事项

  1. 环境初始化:确保在微信开发者工具中初始化了云开发环境,并在小程序代码中调用了wx.cloud.init方法进行环境初始化。
  2. 云函数部署:每次修改云函数代码后,需要重新部署云函数才能生效。在微信开发者工具中,右键点击云函数目录,选择“上传并部署”即可。
  3. 权限管理:根据业务需求,设置合理的云函数权限,确保数据的安全性和隐私性。

本文著作权由作者所有,微信小程序云开发(4)云函数 收录于 日有所思,商业授权请联系作者。

添加新评论

登录