最近自己写了一个Rxjava + Retrofit + okhttp网络请求框架,想测试一下效果,但是却没有接口来提供给自己测试。这下就尴尬了,虽然可以自己去写一个后台,但是这样做起来未免太麻烦,费时费力。我是拒绝这么做的,大家应该也是拒绝的吧!那有什么方便快捷的方法来获得我们想要的返回数据呢?最好是还能有一个网络请求的过程。接下来我们就来看看如何使用node.js来快速搭建自己想要的测试数据。
不知道或者想了解node.js的小伙伴麻烦自行百度一下哈。
首先我们需要先搭建好环境:先把node.js下载
Node.js安装包及源码下载地址为:https://nodejs.org/en/download/。大家根据自己的系统选择下载就行
下载后安装,安装过程非常简单,直接下一步,在第五步时选择第三个选项即可,
大家也可以按照这个Node.js安装教程过程来,安装完成后,我们来到cmd命令行工具中,进入安装目录下(直接打开安装的文件路径,然后在地址栏输入cmd就直接进入了当前目录下)
如上两图所示:第一个为node安装目录,找到后再上方地址栏中输入cmd(如第二图)然后回车,就会进入dos命令窗口,并且在node安装路径下。
为了检查node是否安装成功,我们可以再dos中输入 node -v 查看版本号,如果能成功查看表明安装成功。
然后我们全局安装npm: dos窗口中输入 npm install -g npm 回车
然后在输入 npm install -g cnpm 回车
成功安装后再安装 express 应用程序生成器
dos窗口中 输入npm install -g express-generator 回车
接下来就是重点了:这一步我们会安装一个express应用程序,你可以先选好安装在什么位置,取什么名字
比如我这里安装在D盘node文件夹下的express文件夹中,取名为yinl。那么首先我们需要在dos中进入D:\node\express目录
到这个目录后我们输入命令:express --view=pug yinl 回车,等待成功后,在dos窗口中会看到如下输出信息
这时候我们看文件夹,你会看到你选择的安装目录下多了个yinl文件(如下图)
我们切换到dos窗口,你会看到下方提示我们安装东西,我们按照提示安装即可
先在dos窗口中输入cd yinl 回车
然后 输入 npm install 回车
然后就可以启动项目了:输入 npm start 回车
这个时候你就可以在浏览器中输入localhost/3000,见证神奇的时候到了
看到这个就证明你成功啦!开不开心!哈哈,别着急,我们还有事情需要做。
打开yinl项目,你看到的目录如下图所示:
这个时候,浏览器打开localhost:3000/users,可以看到页面显示respond with a resource
我们好奇找到users文件,在routes目录下,然后打开,
我们可以在routes/users.js文件中自定自己想要得到的返回数据
var express = require('express');
var router = express.Router();
//新增数据
var data = {
'code':'200',
'message':'数据获取成功',
'lists':[
{
'name':'YinL',
'age': '23',
'sex':'男'
},{
'name':'yinl',
'age': '20',
'sex':'女'
}
]
}
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send(data); //修改
});
module.exports = router;
改后之后,因为有缓存的原因,我们需要重新启动node(dos进入项目根目录下,重新运行npm start),然后打开
到这里就算基本完成啦,但是就这样的话,你会发现每次都要来修改这个文件,修改后都需要重新启动,非常的不方便。接下来我们就来继续改进。在项目下新建一个config文件夹并新建一个api.js,配置一下:
api.js内容如下:
var fs = require('fs');
/**
* 检查请求的路径是否存在
* @param apiName 请求路径
* @param method 请求方式
* @param params 请求参数
* @param res 返回请求
*/
function getDataFromPath (apiName,method,params,res){
if(apiName){
fs.access(
// 提取请求路径中的js文件
apiName.substring(1)+'.js',
// 回调函数,检查请求的路径是否有效失败返回一个错误参数
function(err){
if(!err){
// 每次请求都清除模块缓存重新请求
delete require.cache[require.resolve('..'+apiName)];
try{
addApiResult(res,require('..'+apiName).getData(method,params));
}catch(e){
console.error(e.stack);
res.status(500).send(apiName+' has an error,please check the code.');
}
}else{
addApiResult(res);
}
}
);
}else{
addApiResult(res);
}
};
/**
* 响应头
* @param res
*/
function addApiHead(res){
res.setHeader('Content-Type', 'application/json;charset=utf-8');
// 跨域
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
// 控制http缓存
res.header("Cache-Control", "no-cache, no-store, must-revalidate");
res.header("Pragma", "no-cache");
res.header("Expires", 0);
}
/**
* 返回参数,如无返回参数返回404
* @param res
* @param result
*/
function addApiResult(res,result){
if(result){
res.send(result);
}else{
res.status(404).send();
}
}
/*请求方式*/
// get
exports.get = function(req, res){
addApiHead(res);
getDataFromPath(req.path,'GET',req.query,res);
};
// post
exports.post = function(req, res){
addApiHead(res);
getDataFromPath(req.path,'POST',req.body,res);
};
然后打开根目录下app.js文件,在上面引入刚刚新建的文件api.js
//引入APIvarapi =require('./config/api');
并替换配置
/*配置请求*/
app.get('/',function(req, res){
res.send('hello world');});
app.get('/api/*', api.get);
app.post('/api/*', api.post);
下方分别为修改之前和修改之后的内容
然后我们在根目录新建api文件夹,在其中新建test.js;
test.js文件中写上你想要的数据即可。
exports.getData = function(method,data){
var backData={
"success":'true',
"code":'000',
"message":"",
"data":{
"total":'2',
"users":[
{
'name':'YinL',
'age': '23',
'sex':'男'
},
{
'name':'yinl',
'age': '20',
'sex':'女'
}
]}
}
return JSON.stringify(backData);
}
这里完成后,你就可以重新运行npm start,如果这个时候能成功运行,在浏览器打开http://localhost:3000/api/test,你就会看到返回的json。我这边出现了错误
这是因为没有安装这个依赖,我们安装就好了:npm install serve-favicon --save 回车,安装完成后如下图所示
这个时候我们在启动项目 npm start
我们看到成功启动了,如果出现了错误的话,大家对应解决然后在启动就好。在浏览器打开http://localhost:3000/api/test,会看到成功的出来数据啦!哦也!
这个时候,你想添加其他数据,只需要在api目录下去新建其他.js文件就可以啦!添加后可以直接访问的哦。
如果你想完全模仿线上的接口,你只需要一层层的建立文件夹就ok啦!假如线上接口是 https://www.yinl.com/mydata/school/data,我们在api文件夹按照路径新建文件夹和文件即可:api-->mydata-->school-->data.js
如果你想用android studio来测试下数据,你只需要把localhost替换成你本机电脑的ip就ok啦,例如:
http://192.168.x.xxx:3000/api/test (把这个ip地址换成你本机的)
下方为我在android studio测试的数据返回(这是新写的请求框架,有想要的小伙伴嘛?)
可以看到我这里成功的通过android studio访问到我自定义的数据啦,这个log显示的信息也一目了然,新写的这个Rxjava + Retrofit + okhttp 网络请求框架有想要的小伙伴请留言哦,后续我也可能会写对应的博客的!
希望这篇文章能够给大家带来帮助,有啥问题欢迎留言!感谢大家的阅读!