使用Node.js+Express搭建App开发调试Server

在开发手机端App时,通常会出现移动端新页面开发的差不多了,后台接口还没Ready,导致前后端联调浪费了大量时间。
联调过程中又往往涉及到测试服务的切换、抓包验证以及测试异常数据等测试。进而涉及到App重新打包,配置Charles等抓包工具,后台改数据等等工作,非常麻烦。

今天就使用Node.js实现一个用来调试的server,简化这些调试工作。
这个server涉及到以下几个功能:
1. 接口数据的Mock。访问接口即返回我们定义好的假数据,便于在服务端开发完成前就可以测试接口效果。也便于异常值的验证。
2. 接口转发。在联调阶段不需要Mock数据时,可将请求转发给真正的后台接口。这样无需App更改url打包。
3. 抓包打印。将App发给调试Server的请求以及服务端返回的数据输出在Web页面上。这可以满足最基本的抓包需求。

这样我们就可以把调试当中大部分配置工作都放在这个Server上。在Server上做了更改,重启就可生效,省时省力。

服务搭建

安装Node与Express框架

首先安装好Node.js,这个比较简单,用官网的安装包就搞定了。
接下来配置Express,使用npm命令

npm install express-generator -g

安装好以后使用Express的命令行工具生成Server框架。

给server起个名字,比如 avalon
运行命令

express -e avalon

暂时还用不到页面模板的功能,这里就使用 -e 参数用ejs作为页面模板。
Express的工具会生成一个默认的目录结构,我们在此基础上开发就可以。
默认的目录结构大概如下:

.
├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.ejs
    └── index.ejs

bin下的www是启动脚本;public用来提供web页面的静态资源;routes文件夹下是请求路由的代码;views是页面模板文件。

接下来进入到server目录安装依赖

cd avalon
npm install save

启动server

在server目录下运行命令就可以启动服务了。

node ./bin/www

Mock接口数据

Mock数据的功能是最好实现的,单纯使用Node.js就可以了。引入Express框架可以更方便的配置路由。
假设我们的接口路径是:

www.test.com/api/business_one/some.action

修改的步骤如下:

添加接口的路由配置

在app.js中

var businessOneRouter = require('./routes/router_one');

app.use('/api', businessOneRouter);

添加路由代码

接下来在routes文件夹下添加名为router_one.js的文件

var express = require('express');
var router = express.Router();

var result = {
  "data": {
    "location": "北京",
    "lat": "39.90498734",
    "lon": "116.40528870"
  },
  "status": "ok"
};

router.get('/business_one/some.action', function(req, res, next) {
   
  res.send(result);
});

module.exports = router;

这样就完成了接口数据的mock。

接口转发

接口转发流程

接下来实现接口的转发。
为了避免其他应用也通过调试server转发,带来大量无效数据。因此与通用的抓包工具不同,我们仅让待开发的App请求调试server——通过更改debug版本中的服务器host实现。这样也就不需要手机或PC端配置代理了。
手机端发来请求以后,server向后端发起真正的请求,保持Header及参数与客户端完全一致,将host替换为真正的服务器地址。接收到服务端返回结果后,同样将Header与数据原样返回给客户端。

这一大致流程如下:

客户端发起请求–>调试server接收–>调试server向后端发起真正请求–>后端返回结果–>调试server将结果返回给客户端

为了方便描述,下面我们使用 cnodejs.orgv2ex.com 两个网站公开的api作为测试接口。

封装转发模块

我们将转发封装为模块,向外暴露一个接口即可。在项目下创建文件 proxyHelper.js
首先定义一个转发的入口方法,供我们在路由中调用:

function proxyRequest(req, res, hostStr, method) {
   
  let options = optionFactoryWithHost(req, hostStr);  // 生成请求配置

  if (method === 'https') {
    // https的转发
  } else {
    // http的转发
  }
}

reqres 均为router回调传递进来的参数。考虑到后台接口的服务可能不同,在这里需要提供服务器地址。此外为支持http与https两种方式访问,这里也通过参数来进行处理。
这个接口对外暴露,直接在 router 里使用:

router.get('/api/nodes/show.j
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值