评论

微信小程序前端开发黑科技——前后端交互

本文介绍了如何让小程序前端跟自己搭建的后端完成交互

1. 问题引入

现在正在学习小程序开发。在开发过程中,前后端交互是非常重要的一环。我选择的是自己搭建后台、前后端分离的开发方式。在这种情况下,按照官方文档的说法,我只能自己配置域名或使用局域网通信。但我想节约学习成本,该怎么办呢?

2. 问题解决——使用工具ngrok

2.1. 下载ngrok

通过这个链接下载即可:https://ngrok.com/download

解压后,就一个exe文件

2.2. 注册获得Authtoken

回到官网进行注册。如果已经有GitHub账号,建议直接使用GitHub账号进行登录并完成注册,因为这外网的注册一直有些问题。
完成注册并登录后,获取Authtoken(已打码)

2.3. 配置代理域名

打开下载解压后的exe文件,输入命令

ngrok authtoken yourauthtoken

将yourauthtoken换成自己的Authtoken即可
然后根据开发需要,配置相应的端口(这里以8080端口为例)

ngrok http 8080

可以得到如下结果

红框中生成的即为代理域名,任选一个即可。

2.4. 修改微信开发者工具中的设置


这样就完成配置了。这时候我们就可以在外网访问内网,那样子我们手机不用与电脑在同一网段(即手机用4g,电脑连wifi)也可以进行测试。

2.5. 测试验证

后端的测试代码(go语言,gin框架)

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{"message": "pong"})
	})
	r.Run()
}

前端发送请求的测试代码

前端输出的测试结果

后端输出的测试结果

测试结果表明前后端成功完成交互,测试成功!

3. 问题拓展——内网穿透

看懂该部分需要有计算机网络的知识。
首先来描述一下问题的本质。在本机调试中,自己的电脑或服务器在没有配置域名的情况下,相当与内网;而微信开发者工具却是在外网上运行的(需要使用自己的微信号登录)。当微信小程序前端向自己搭建的后端发出请求时,相当于外网主动访问内网。所以问题的本质就是外网对内网的访问。

由计算机网络的知识可以知道这显然是不行的。这时有两种解决方式。
第一种是给服务器配置域名,相当于让内网主动接入外网,这样外网就能访问到了。
第二种是使用内网穿透。即让在内网的节点主动访问一个拥有公网IP地址的服务器,并由中间服务器搭桥,打通经过该服务器从其他主机到NAT之后节点的隧道。结合该问题通俗地讲,就是找了一个服务器作为中转站,让微信小程序先将消息发到中转服务器上,再让中转服务器将消息发送到本机的后台,这样就完成了前后端交互通信。

4. 心得

平时总觉得专业课学的东西没啥用,跟空中楼阁一样排不上用场。这次解决问题的过程却用到了许多计算机网络的知识。我不禁感概,果然技术还是需要实践的,只有真正动手了才能更好地理解所学的专业知识。未来我一定要好好复习计算机基础知识,进一步把专业知识的功底打扎实!

参考资料:

[1]. 博客:https://blog.csdn.net/nanshenjiang/article/details/87889983
[2]. 知乎:https://zhuanlan.zhihu.com/p/303175108
[3]. 《计算机网络:自顶向下方法》(原书第七版)

最后一次编辑于  2021-11-15  
点赞 3
收藏
评论

6 个评论

  • 晨曦
    晨曦
    2021-11-15

    后续:

    经过调试后发现,只需在小程序开发工具勾选上“不校验域名合法性”即可,不需要像上面写得这么麻烦QAQ

    访问云服务器使用公网IP访问即可

    2021-11-15
    赞同 2
    回复
  • TYXX
    TYXX
    2021-11-15

    好文,收藏了,感觉自己最欠缺的就是这些

    2021-11-15
    赞同 2
    回复
  • Smooth
    Smooth
    2021-11-15

    计算机专业的基础知识确实很重要,只要你是程序员就必须要掌握好那四件套

    2021-11-15
    赞同 1
    回复 1
    • 晨曦
      晨曦
      2021-11-15
      是的。基础真的太重要了!
      2021-11-15
      回复
  • PD
    PD
    发表于移动端
    2021-11-15
    大佬太强了,果然专业硬才是硬道理
    2021-11-15
    赞同
    回复 1
    • 晨曦
      晨曦
      2021-11-15
      没有没有,我都是借鉴来的。平时我很难将知识跟实际问题联系起来QAQ
      不过说实话,把计算机基础知识打扎实真的很重要!
      2021-11-15
      回复
  • PD
    PD
    发表于移动端
    2021-11-15
    大佬太强了,果然专业硬才是硬道理
    2021-11-15
    赞同
    回复
  • 谋谋谋
    谋谋谋
    2021-11-15

    社区大佬真多我算是学到了

    2021-11-15
    赞同
    回复 2
    • 晨曦
      晨曦
      2021-11-15
      加油!多动手,多查资料,实践才能学到真东西!
      2021-11-15
      回复
    • 谋谋谋
      谋谋谋
      2021-11-15回复晨曦
      是的大佬 这话没毛病
      2021-11-15
      回复
登录 后发表内容