node代理网络请求
server.js
var express = require('express')
var axios = require('axios')
var port = 9000;
var app = express(); var allowCrossDomain = function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
next();
}; app.use(allowCrossDomain); var apiRoutes = express.Router()
apiRoutes.get('/getData', function (req, res) {
var url = req.query.reqUrl;
axios.get(url, {
headers: {
authority: 'https://xx.xx.xx/',
cookie: 'xxxxxxxxxxxxx'
},
params: req.query
}).then((response) => {
res.json(response.data)
}).catch((e) => {
console.log(e)
})
}) app.use(apiRoutes) module.exports = app.listen(port, function (err) {
if (err) {
console.log(err)
return
}
console.log('Listening at http://localhost:' + port + '\n')
})
index.html
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="layui-v2.4.5/css/layui.css">
</head> <body>
<div class="container">
<div class="input-box" style="padding:20px 20px 0 20px;">
<form class="layui-form layui-row" lay-filter="">
<div class="layui-input-inline layui-col-xs12 layui-col-sm6 layui-col-md3 layui-col-lg3">
<input type="text" name="title" required lay-verify="required" placeholder="请输入relatedId" autocomplete="off" class="layui-input" id="input" value="5624669de0f55a5286003b95">
</div>
<div class="layui-input-inline" style="padding:5px 0 0 20px;">
<div class="layui-btn layui-btn-sm layui-btn-normal" id="confirm">搜索</div>
</div>
</form>
</div>
<div class="table-box" style="padding:0 20px;">
<table class="layui-table">
<colgroup>
<col width="400">
<col>
</colgroup>
<thead>
<tr>
<th>错误摘要</th>
<th>应用版本</th>
<th>最近发生时间</th>
<th>最后发生时间</th>
<th>错误次数</th>
<th>影响用户数</th>
</tr>
</thead>
<tbody id="templateTbody"></tbody>
</table>
</div>
</div>
<script id="tmpl" type="text/html">
{{# layui.each(d.data, function(index, item){ }}
<tr>
<td>{{item.summary}}</td>
<td>{{item.appVersion}}</td>
<td>{{item.firstHappenTime}}</td>
<td>{{item.lastHappenTime}}</td>
<td>{{item.happenTimes}}</td>
<td>{{item.affectUsers}}</td>
</tr>
{{# }); }}
{{# if(d.data.length === 0){ }}
暂无数据
{{# } }}
</script>
<script src="layui-v2.4.5/layui.js"></script>
<script src="index.js"></script>
</body> </html>
index.js
layui.use(['form', 'jquery', 'laytpl', 'layer'], function() {
var form = layui.form;
var $ = layui.jquery;
var laytpl = layui.laytpl;
var layer = layui.layer; $('#confirm').on('click', function() {
var id = $.trim($('#input').val());
if (!id) {
layer.msg('请输入relatedId');
return;
};
var reqUrl = getUrl(id);
sendReq(reqUrl);
}) function getUrl(id) {
var date = new Date().toLocaleString();
var date1 = date.split(' ')[0].replace(/\//g, '');
var date2 = date.split(' ')[1].replace(/:/g, '');
return `https://mobile.umeng.com/ht/api/qb/v1/error/search?versions=&startDay=${date1}+000000&endDay=${date1}+${date2}&exValue=&exField=abstract&relatedId=${id}&errorClass=1&pageSize=120&page=1`;
} function sendReq(reqUrl) {
console.log(reqUrl);
$.ajax({
url: 'http://127.0.0.1:9000/getData',
data: { reqUrl: reqUrl },
success: function(ret) {
if (ret.code === 200) {
var data = ret.data;
data.data = normalize(data.data);
var getTpl = tmpl.innerHTML;
var view = document.getElementById('templateTbody');
laytpl(getTpl).render(data, function(html) {
view.innerHTML = html;
});
} else {
layer.msg('请求错误:' + ret.msg);
}
}
})
} function normalize(data) {
$.each(data, function(i, e) {
e.firstHappenTime = new Date(e.firstHappenTime).toLocaleString();
e.lastHappenTime = new Date(e.lastHappenTime).toLocaleString();
if (e.summary.indexOf('\n') > -1) {
e.summary = e.summary.slice(0, e.summary.indexOf('\n'));
}
})
return data;
} Date.prototype.toLocaleString = function() {
function addZero(num) {
if (num < 10)
return "0" + num;
return num + '';
}
return this.getFullYear() + "/" + addZero(this.getMonth() + 1) + "/" + addZero(this.getDate()) + " " +
addZero(this.getHours()) + ":" + addZero(this.getMinutes()) + ":" + addZero(this.getSeconds());
};
})
node代理网络请求的更多相关文章
- AndroidInject项目使用动态代理增加对网络请求的支持
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3540427.html AndroidInject项目是我写的一 ...
- [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)
[爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP) 原文链接:https://www.cnblogs.com/blog5277/p/9334560.html 原 ...
- android通过fiddler代理,抓取网络请求
安装fiddler过程省略 1, 2, 3, 4,手机需要跟电脑处于同一局域网,设置网络代理为电脑在局域网内的ip,端口为3步设置的port 5,电脑就可以通过fiddler监控手机的所有网络请求了( ...
- iOS_网络请求_代理方式
#pragma mark - 网络请求代理方式(异步) - (IBAction)DelegateButtonDidClicked:(UIButton *)sender { // 1.拼接 urlStr ...
- 十. Axios网络请求封装
1. 网络模块的选择 Vue中发送网络请求有非常多的方式,那么在开发中如何选择呢? 选择一:传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢?非常好解释配置和调用方式等非常混 ...
- Jest中Mock网络请求
Jest中Mock网络请求 最近需要将一个比较老的库修改为TS并进行单元测试,修改为TS还能会一点,单元测试纯粹是现学现卖了,初学Jest框架,觉得在单元测试中比较麻烦的就是测试网络请求,所以记录一下 ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
- 【Swift】Alamofile网络请求数据更新TableView的坑
写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...
- nginx android app 慢网络请求超时
最近遇到了android 在慢网络下面请求服务器报 java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by ...
随机推荐
- Java8新特性(一)概览
最近看了好几段Java代码和以往的风格很不一样,都有点不太适应了,后来一查原来是Java8的新特性. 为了保持对技术的敏感性(面试...),这里我们一起来学习下Java8的新特性. 如果从技术角度来看 ...
- 九度OJ 1096:日期差值 (日期计算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8138 解决:2752 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据, ...
- ChannelHandler揭秘(Netty源码死磕5)
精进篇:netty源码死磕5 揭开 ChannelHandler 的神秘面纱 目录 1. 前言 2. Handler在经典Reactor中的角色 3. Handler在Netty中的坐标位置 4. ...
- shared SDK 微信开放平台遇到的问题
shared sdk是用于集成到app中,方便快速社交化分享的组件,其使用方法比较简单,参考官网的快速集成步骤就能搞定.稍微麻烦一点的就是需要到各个开放平台去注册你的APP. 在各个开放平台注册好之后 ...
- WebDriver API——javascript的相关操作
有些时候webdriver是没法操作元素或浏览器的,这时候我们可以通过javascript来进行相关的操作,昨天在群里一个朋友定位一个显示框,总是无法定位点击,或者是点击无效,这个时候就可以用java ...
- 使用eclipse的SVN连接码云
码云配置: 码云的项目上,启用SVN访问 eclipse的配置,不配置这个会报错
- 谈谈网站测试中的AB测试方法
什么是A/B测试? A / B测试,即你设计的页面有两个版本(A和B),A为现行的设计, B是新的设计.比较这两个版本之间你所关心的数据(转化率,业绩,跳出率等) ,最后选择效果最好的版本. A / ...
- html5--3.6 input元素(5)
html5--3.6 input元素(5) 学习要点 input元素及其属性 input元素 用来设置表单中的内容项,比如输入内容的文本框,按钮等 不仅可以布置在表单中,也可以在表单之外的元素使用 i ...
- 自适应布局all样式
/*css document*/@charset "utf-8"*{-webkit-tap-highlight-color:rgba(0,0,0,0); padding:0; ma ...
- HDU2602(01背包)
Bone Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...