在开发一块新功能的过程中,我们通常会涉及到与后端接口联调的问题。新的界面、新的后口,这时候在开发的时候往往前端就很尴尬,后端不依赖前端,但是前端十分依赖后端。
大部分应用都会有或多或少地依赖后端数据,有的界面只需要简单搞个假数据传入即可,但是我们还需要应对很多复杂情况,比如:
这时候如果能够写一个简单的服务器,你请求真实的接口url,只需要给手机设置一个代理,就返回你设置的假数据。这样你就可以完全抛开其他依赖的顾虑,可以像正常情况一样开发、校验结果,而不是依赖写死在代码里的各种假逻辑(这样做也会为后面的开发带来一些隐患)。
实际上服务器本身的逻辑是非常简单的,但是要真正得搭建成你所需要的环境,需要一些复杂功夫。本文以nodejs为例,具体描述一下如何在本机上搭建测试服务器。
Unix 用户可以使用命令行安装nodejs。
Windows 用户可以直接下载安装包。
安装成功后如果在命令行下输入 node -v
能够打印出版本信息,说明安装成功了。
Node 服务器可以运行在“IP:PORT”上,我们可以通过如下代码来在 127.0.0.1:2333
端口上搭建起一个简单的服务器:
consthttp =require('http'); http.createServer( (req, res) => { // 返回码200,返回头中标识内容为json res.writeHead(200, {'Content-Type':'text/json'}); letresp = { code : 0, time : 1469981217, data : { name : 'desmond', gender : 'male' } }; res.end(JSON.stringify(resp));// 将resp转换为JSON字符串返回。 }).listen(2333,'127.0.0.1', )
具体的信息可以参考 Nodejs-http .
从IDE环境切换到脚本环境来写代码总会不顺手,推荐一个我认为比较容易上手的配置吧:
配上这三个,你就会觉得用起来已经蛮舒服了。
nginx 搭建服务器的强大处之一就是它的代理能力,配置也十分简洁。
如果要模拟最终的请求的话,我们应该是原封不动的保留请求url: ‘www.desmond.com/api/something’。首先我们需要 在手机上设置代理,将ip配置到自己电脑上,端口配为80 。但是你的电脑识别到这个请求后,怎么让它导流到你的node服务器,这是一个问题。如果你代码写死的ip+端口来访问,未免有点太low了,我们既然折腾了这么多,那可以继续往下走一步: 反向代理 。
反向代理,简而言之,就是一个分发请求的代理。 前向代理 是直接发给目标服务器,但是它会做一些额外的处理工作。反向代理不一样,它自己相当于是一个服务器,请求到它手里,它根据请求去不同服务器上拉取数据。
Linux用户可以使用命令行:
apt-get update apt-get install nginx
OSX用户可以用Homebrew:
brew install nginx
Windows用户可以 下载安装包
我们希望针对’www.desmond.com/api/something’下的url交由node服务器(2333端口)处理,其他情况下继续发送,可以在 nginx.conf
里面这么配置(可以在命令行下输入 nginx -t
找到配置文件位置):
server { listen 本机ip:80; server_name www.desmond.com; #charset koi8-r; access_log /Users/desmond/Nginx/api.access.log; error_log /Users/desmond/Nginx/api.error.log; location / { //默认情况原路继续 resolver 8.8.8.8; proxy_pass http://$http_host$request_uri; proxy_set_header Host $http_host; proxy_connect_timeout 5; } location /api { //检测到api路径下的,转发到端口2333 proxy_pass http://localhost:2333; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
这里如果希望原路继续的那些url域名解析配合你的 host
(此处使用 8.8.8.8
来做DNS解析),你可以参考 StackOverflow的一个提问
。
这样一来,你所有手机上访问的 www.desmond.com/api/something
就导到你的nodejs服务器上啦,尽情配置假数据来测试吧~~