小白学习微信小程序的客户端与服务端交互

案例1:用户登录与注册

客户端代码:

// 小程序登录页面
// 获取用户信息
wx.getUserInfo({
  success: function(res) {
    var userInfo = res.userInfo;
    // 用户登录
    wx.login({
      success: function(res) {
        var code = res.code;
        // 发送登录请求到服务端
        wx.request({
          url: 'https://api.example.com/login',
          method: 'POST',
          data: {
            code: code,
            userInfo: userInfo
          },
          success: function(res) {
            // 登录成功
            var token = res.data.token;
            // 将token保存到本地存储
            wx.setStorageSync('token', token);
            // 跳转到主页
            wx.navigateTo({
              url: '/pages/home/home',
            })
          },
          fail: function(res) {
            // 登录失败
          }
        })
      }
    })
  }
})

// 小程序注册页面
// 获取用户信息
wx.getUserInfo({
  success: function(res) {
    var userInfo = res.userInfo;
    // 用户注册
    wx.login({
      success: function(res) {
        var code = res.code;
        // 发送注册请求到服务端
        wx.request({
          url: 'https://api.example.com/register',
          method: 'POST',
          data: {
            code: code,
            userInfo: userInfo
          },
          success: function(res) {
            // 注册成功
            var token = res.data.token;
            // 将token保存到本地存储
            wx.setStorageSync('token', token);
            // 跳转到主页
            wx.navigateTo({
              url: '/pages/home/home',
            })
          },
          fail: function(res) {
            // 注册失败
          }
        })
      }
    })
  }
})

服务端代码:

// 登录接口
app.post('/login', function(req, res) {
  var code = req.body.code;
  var userInfo = req.body.userInfo;
  // 发送code到微信服务器,获取openid和session_key
  wx.login({
    code: code,
    success: function(res) {
      var openid = res.data.openid;
      var session_key = res.data.session_key;
      // 生成token,保存到数据库
      var token = generateToken();
      // 将token返回给客户端
      res.json({
        token: token
      });
    },
    fail: function(res) {
      // 登录失败
      res.status(400).json({
        message: '登录失败'
      });
    }
  })
});

// 注册接口
app.post('/register', function(req, res) {
  var code = req.body.code;
  var userInfo = req.body.userInfo;
  // 发送code到微信服务器,获取openid和session_key
  wx.login({
    code: code,
    success: function(res) {
      var openid = res.data.openid;
      var session_key = res.data.session_key;
      // 生成token,保存到数据库
      var token = generateToken();
      // 将token返回给客户端
      res.json({
        token: token
      });
    },
    fail: function(res) {
      // 注册失败
      res.status(400).json({
        message: '注册失败'
      });
    }
  })
});

案例2:获取用户信息

客户端代码:

// 小程序首页
// 获取用户信息
wx.getSetting({
  success: function(res) {
    // 判断用户是否授权
    if (res.authSetting['scope.userInfo']) {
      // 已授权,直接获取用户信息
      wx.getUserInfo({
        success: function(res) {
          var userInfo = res.userInfo;
          // 将用户信息保存到本地存储
          wx.setStorageSync('userInfo', userInfo);
        }
      })
    } else {
      // 未授权,跳转到授权页面
      wx.navigateTo({
        url: '/pages/authorize/authorize',
      })
    }
  }
})

// 小程序授权页面
// 用户点击授权按钮
getUserInfo: function(e) {
  if (e.detail.userInfo) {
    var userInfo = e.detail.userInfo;
    // 将用户信息保存到本地存储
    wx.setStorageSync('userInfo', userInfo);
    // 返回上一页
    wx.navigateBack();
  }
}

服务端代码:

// 获取用户信息接口
app.get('/user', function(req, res) {
  var token = req.headers.authorization;
  // 验证token
  if (validateToken(token)) {
    // 获取用户信息
    var userInfo = getUserInfo();
    // 返回用户信息给客户端
    res.json(userInfo);
  } else {
    // token验证失败
    res.status(401).json({
      message: 'token验证失败'
    });
  }
});

案例3:上传图片

客户端代码:

// 小程序首页
// 用户选择图片
chooseImage: function() {
  wx.chooseImage({
    success: function(res) {
      var tempFilePaths = res.tempFilePaths;
      // 上传图片到服务端
      wx.uploadFile({
        url: 'https://api.example.com/upload',
        filePath: tempFilePaths[0],
        name: 'image',
        success: function(res) {
          // 上传成功,返回图片地址
          var imageUrl = res.data.imageUrl;
          // 将图片地址保存到本地存储
          wx.setStorageSync('imageUrl', imageUrl);
        },
        fail: function(res) {
          // 上传失败
        }
      })
    }
  })
}

服务端代码:

// 上传图片接口
app.post('/upload', function(req, res) {
  var token = req.headers.authorization;
  // 验证token
  if (validateToken(token)) {
    // 获取临时文件路径
    var tempFilePath = req.files.image.path;
    // 上传图片到云存储
    var imageUrl = uploadImage(tempFilePath);
    // 返回图片地址给客户端
    res.json({
      imageUrl: imageUrl
    });
  } else {
    // token验证失败
    res.status(401).json({
      message: 'token验证失败'
    });
  }
});

以上是关于小程序客户端与服务端交互的三个案例,分别涉及用户登录与注册、获取用户信息和上传图片三个常见的功能。其中,客户端通过wx.request方法向服务端发送请求,服务端根据请求的参数处理相应的逻辑,并返回相应的结果给客户端。客户端在收到服务端返回的结果后,可以根据需要进行相应的处理。

要注意的是,在实际开发中,服务端需要对请求进行身份验证,一般会采用token验证的方式,确保请求来自合法的用户。此外,服务端还需要对上传的文件进行处理,例如将图片上传到云存储,并返回图片的地址给客户端。

以上代码仅作为示例,实际开发中可能会有更多的逻辑和错误处理。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值