手把手教你搭建Mac环境微信小程序的本地测试服务器

问题的提出

  • Mac环境
  • 方便快捷地搭建小程序的测试服务器
  • 小程序对于网络请求的URL的特殊要求

    • 不能出现端口号
    • 不能用localhost
    • 必须用https

主要步骤

  • 用json-server搭建简单的服务器,搭建出来的服务器地址为localhonst:3000
  • 安装nginx进行反向代理,以便隐藏端口号和替换localhost
  • 搭建https服务
  • 微信小程序设置

用到的工具

  • json-server
  • nginx
  • openssl
  • 微信小程序官方开发工具

json-server的使用

  • 安装
sudo npm install -g json-server
  • 选一个文件目录新建json文件,比如cars.json
{"cars": [{"id": 1,"desc": "哈弗H6","completed": false},{"id": 2,"desc": "吉利博越","completed": false},{"id": 3,"desc": "宝骏560","completed": false}]
}
  • 启动json-server服务:在新建的json文件目录,运行命令:json-server + 文件名
json-server cars.json

输出:

Loading cars.json
DoneResources
http://localhost:3000/carsHome
http://localhost:3000
  • 浏览器中输入地址http://localhost:3000/cars就能看到输出cars.json的内容
  • 至此,就搭建了一个简单的本地测试服务器,json-server支持get,post等,基本足够开发测试用了,具体的可以参考json-server官网
  • 为了将localhost:3000/todos这样的接口改成www.test.com/todos这样的形式,就需要用nginx进行反向代理

用nginx进行反向代理

  • 安装nginx
brew install nginx

通过以上方式安装nginx,我的nginx路径在/usr/local/etc/nginx

  • 浏览器中键入http://localhost:8080,访问到nginx的欢迎界面,即表示nginx安装成功
  • 配置nginx的反向代理:编辑nginx.conf文件
vi /usr/local/etc/nginx/nginx.conf
  • 修改nginx.conf文件中的server{}内容。这里要注意的是,conf文件里面主要有2个server{},一个是默认监听http请求的8080端口的,另一个是https请求的。其中https server默认是注释掉的
server {listen       80;//将原来的8080改成80端口,这样就能隐藏请求中的端口号了server_name  www.test.com;//这里改成你想要的测试域名server_name_in_redirect off;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://127.0.0.1:3000/;//需要代理的地址,这里是我们json-server的默认地址}
}
  • 重启nginx服务
sudo nginx -s reload //不带sudo可能会重启nginx失败
  • 不要忘记将你的测试域名加入到hosts文件中啊!!!
//hosts文件中添加测试域名
127.0.0.1 www.test.com
  • 经过以上的设置,nginx代理的设置的完成了。启动json-server后可以用以下方式访问浏览器
localhost/cars
localhost
www.test.com
www.test.com/cars

其他问题

  • nginx常用的命令
//启动
nginx//重启
sudo nginx -s reload//关闭
nginx -s stop
  • Mac修改hosts
Finder的“前往”->“前往文件夹” 输入 /private/etc 按回车  就可以看到里面的hosts文件了。直接右键选择“文本编辑”打开,修改,保存即可。 
  • 配置nginx碰到FT_Select_size:undefined问题
可以尝试安装fontconfig库解决
  • 碰到其他的文件不存在之类的问题,请仔细检查命令是否输入正确,配置文件是否修改正确

https服务安装

  • 利用openssl生成证书
cd usr/local/etc/nginx/conf
设置server.key:openssl genrsa -des3 -out server.key 1024
参数设置:openssl req -new -key server.key -out server.csr
写RSA秘钥:openssl rsa -in server.key -out server_nopwd.key
获取私钥:openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt
  • 修改nginx配置文件nginx.conf
server {listen       80;//将原来的8080改成80端口,这样就能隐藏请求中的端口号了server_name  www.test.com;//这里改成你想要的测试域名//主要是增加下面三行ssl on;ssl_certificate /usr/local/etc/nginx/server.crt;//你的证书地址ssl_certificate_key /usr/local/etc/nginx/server_nopwd.key;//私钥地址server_name_in_redirect off;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://127.0.0.1:3000/;//需要代理的地址,这里是我们json-server的默认地址}
}
  • 以上配置以后,用http://www.test.com/cars访问浏览器会出现400 bad request的问题,用https://www.test.com/cars又会出现net::ERR_CONNECTION_REFUSED
  • 继续修改nginx.conf,主要是修改https server{}模块,主要修改点:

    • 将https server{}模块注释去掉
    • 添加ssl相关配置
    • 添加代理设置
# HTTPS server
#
server {listen       443 ssl;server_name  localhost;#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;ssl_certificate /usr/local/etc/nginx/server.crt;ssl_certificate_key /usr/local/etc/nginx/server_nopwd.key;#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;server_name_in_redirect off;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {proxy_pass http://127.0.0.1:3000/;root   html;#      index  index.html index.htm;}
}
  • 至此,https服务配置完成,可以在浏览器中用https://www.test.com/cars访问

其他问题

  • Chrome中老是访问的不是安全的链接
需要将我们前面生成的证书crt文件添加到系统证书里面,并设置为一直信任

微信小程序配置

  • 登陆微信小程序管理页面,设置-->开发设置-->服务器域名-->添加自己的测试域名。需要注意的是一个月只能修改5次
  • 利用微信小程序打开项目,在配置信息中点击刷新,即可看到刚刚修改的域名
  • 在需要网络请求的地方添加log打印,以便查看返回的结果信息
wx.request({url: 'https://www.test.com/cars',method:'GET',header: {'content-type': 'application/json'     },success: function (res) {console.log(res.data)}
})
showRequestInfo()
  • 如果一切正常的话,在调试界面的conole下会输出json-server服务器返回的objects列表,也就是我们编写的cars.json文件的内容

其他问题

  • 网络请求服务器API的时候报此服务器的证书无效.
在项目页面的基础信息中,勾选下面的“开发环境不校验请求域名以及TLS版本

以上就是Mac下搭建小程序服务器的过程。


欢迎关注我的微信公众号,和我一起学习一起成长!
AntDream

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义vue-cli生成项目模板配置(1)

最近在读《变量》,目前得到的认知之一:慢变量才是决定事物长期发展的因素。 打算自定义vue-cli的脚手架或者根据自己的需要设置项目模板的相关参数,很大程度与慢变量这个概念相关。 当然,我还有一个想法或者认知:我的技…

spring cloud 微服务调用--ribbon和feign调用

这里介绍ribbon和feign调用两种通信服务调用方式,同时介绍如何引入第三方服务调用。案例包括了ribbon负载均衡和hystrix熔断--服务降级的处理,以及feign声明式服务调用。例子包括spring boot项目,用来作为第三方服务供ribbon消费和feign消费客…

35岁前把下面十件事做好

35岁是青春的后期,35岁以后是收获的季节,如果你没有资格说这句话,你将会憎恨自己。所以在35岁以前,在烂漫蓬勃的青春年华里,你最好把下面十件事做好: 第一,学会本行业所需要的一切知识并有所发展…

Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)

1.包装类 1)包装类为基本数据类型提供了相应的引用数据类型。(基本数据类型-包装类)btye-Byte,char-Character,short-Short,float-Floatint-Integer,double-Double,long-Long,boolean-Boolean 2)通过包装类的构造器来实现吧基本数据类型包装成…

log4j.xml引用Javaweb项目中配置文件的参数

2019独角兽企业重金招聘Python工程师标准>>> 由于最近用阿里云日志服务整合log4j,在配置com.aliyun.openservices.log.log4j.LoghubAppender需要设置一些参数,因为项目中有统一的配置文件,所以想要可以直接在log4j.xml中通过${}来…

……

快疯了快疯了…… 我无非是想找人说话。已经几天没有讲话了。 转载于:https://www.cnblogs.com/belial/archive/2007/04/13/711429.html

时间换算单位

时钟周期是一个时间的量,人们规定10纳秒(ns)为一个时钟周期。时钟周期表示了SDRAM所能运行的最高频率。更小的时钟周期就意味着更高的工作频率。对于PC100规格的内存来说,它的运行时钟周期应该不高于10纳秒。纳秒与工作频率之间的…

砂 即懒且忙 只有随笔

B同学说:砂,你已经好久没更新你的博了。是啊,我即懒且忙。上周六爬了青云山,公司组织的。一直懒得处理照片。拍了将近300张的照片,可到现在也就才弄了那么几张。我自恋。照片是自拍的。娘说:天呐&#xff0…

.Net Core创建Docker镜像

1、.Net Core项目【Lails.Server.Demo】发布到目录下Lails.Server.Demo\bin\Release\netcoreapp2.1\publish2、上面目录下新建文件Dockerfile:# 父镜像FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base# 设置工作目录WORKDIR /app# 复制发布文件到/app下COPY …

[原]变参函数原理详解

/*变参函数原理说明:va_start就是求得第一个可变参的地址.下面几个宏的作用:保是来确定可变参数的列表中每个参数的地址.实现变参函数的要点,就是想办法取得每个参数的地址.*/#include <stdio.h> #include <stdarg.h>#if 0#define va_list void*#define va_arg(arg…

Web服務器的配置方法

Web服務器的配置方法 一、 安裝IIS 1. 進入[控制面板]-[新增/移除Windows元件]&#xff0c;勾選Internet Information Servers(IIS)如圖&#xff0c;在安裝過程中需要插入windows操作系統光盤2. 建立虛擬目錄 右擊[我的電腦]--管理&#xff0c;找到[…

2018年开发者生态体系状态调查报告(第一部分)

在2018年年初&#xff0c;jetbrains公司通过调查6000名开发者来了解开发者的生态状态&#xff0c;最近&#xff0c;调查结果终于整理完毕&#xff0c;以下是得出的结果。一、 日常工作1.1&#xff09;流行语言&#xff1a;今年&#xff0c;使用最受欢迎、最常用与最有前途的语言…

面向对象三大基本特性,五大基本原则

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是&#xff1a;封装,继承,多态 所谓封装&#xff0c;也就是把客观事物封装成抽象的类&#xff0c;并且类可以把自己的数据和方法只让可信的类或者对象操作&#xff0c;对不可信的进行信息隐藏。封装是…

人事薪资管理系统V1.00功能简介(适用于工厂)c#.net+SQL Server2000

1. 统计管理1.1 工厂员工综合统计1.2 按月统计生产订单总金额1.3 按月统计员工工资1.4 按月统计员工计件工资1.5 员工生日排行榜2. 人事管理2.1 增加员工信息2.2 上传或更换员工照片2.3 确认员工基本薪资&#xff08;含包月&#xff0c;计件&#xff0c;计…

运维工程师主要工作是做什么?

总结两句话&#xff1a; 1、保障业务长期稳定运行&#xff08;如网站服务器、游戏服务器等&#xff09;。 2、保障数据安全可靠&#xff08;如用户名密码、游戏数据、博客文章、交易数据等&#xff09;。 由这两句话推演运维工程师要学些什么&#xff1f; 一、保障业务长期稳定…

python3.7 安装cx_Freeze

遇到的问题简单描述&#xff1a; 1&#xff0c;直接 pip install cz_freeze 安装失败 2&#xff0c;pip cx_Free-*.*.*.tar.gz 安装失败 解决办法&#xff1a; 1&#xff0c;下载 cx_Freeze-5.1.1-cp37-cp37m-win_amd64.whl &#xff08;地址&#xff1a;https://www.lfd.uci…

SiteMesh参考

SiteMesh参考 作者&#xff1a;kongxx (kongxxgmail.com)安装 首先从sitemesh下载安装包&#xff0c;这里使用的是2.2.1版本。 创建一个Web应用程序&#xff0c;这里我创建一个名为myapp的Web应用程序&#xff1b; 复制sitemesh-2.2.1.jar文件到{myapp}/WEB-INF/lib目录下&am…

精通Spring Boot——第十一篇:使用自定义配置

2019独角兽企业重金招聘Python工程师标准>>> 今天这篇文章给大家介绍自定义配置的两种方式 第一式&#xff1a; 使用ConfigurationProperties&#xff0c;且看代码 package com.developlee.customconfig.config;import org.springframework.boot.context.properties…

MySQL 高可用架构在业务层面的应用分析

MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid208312443&idx1&snf9a0d03dd9a1cf3b3575c0241291e421&scene22&srcidseLU5tmZumKLzwVBIHzM#rd http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid20831244…

使用Expresso学习.net正则表达式

什么是RE?想必各位大大在做文件查找的时侯都有使用过万用字符”*”&#xff0c;比如说想查找在Windows目录下所有的Word文件时&#xff0c;你可能就会用”*.doc”这样的方式来做查找&#xff0c;因为”*”所代表的是任意的字符。RE所做的就是类似这样的功能&#xff0c;但其功…