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 ...
随机推荐
- Android活动条(actionbar)使用具体解释(一)
活动条(ActionBar)是Android3.0的重要更新之中的一个.ActionBar位于传统标题的位置,其主要提供了例如以下功能: >显示选项菜单的菜单项,即激昂菜单项显示 ...
- 51NOD 1962 区间计数 单调栈+二分 / 线段树+扫描线
区间计数 基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80 两个数列 {An} , {Bn} ,请求出Ans, Ans定义如下: Ans:=Σni=1Σnj=i[max{ ...
- 九度OJ 1123:采药 (01背包、DP、DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2705 解决:1311 题目描述: 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师. 为此,他想拜附近最有威望的医师为师 ...
- 九度OJ 1118:数制转换 (进制转换)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3873 解决:1494 题目描述: 求任意两个不同进制非负整数的转换(2进制-16进制),所给整数在long所能表达的范围之内. 不 ...
- 操作系统 资源管理 zookeeper yarn 进程管理 分布式 yarn诞生背景
zookeeper 信息保管员 YARN 简介 https://www.ibm.com/developerworks/cn/data/library/bd-yarn-intro/index.html
- left outer join preserving unmatched rows from the first table
https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj18922.html INNER JOIN operation Specifies a join ...
- Android 反编译工具
想必玩安卓的童鞋大多都知道,安卓的APK安装包是可以反编译出源代码的,如果开发人员发布时没有对其混淆等加密处理,反编译出来的代码几乎与真实的源代码一模一样. 想要反编译apk,需要用到apktool. ...
- vue指令与$nextTick 操作DOM的不同之处
异步更新队列 可能你还没有注意到,Vue 异步执行 DOM 更新.只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变.如果同一个 watcher 被多次触发,只会被推 ...
- SystemV和BSD的区别
目前,Unix操作系统不管其内核如何,其操作风格上主要分为SystemV(目前一般采用其第4个版本SVR4)和BSD两种.其代表操作系统本别是Solaris和FreeBSD.当然,在SunOS4(So ...
- 操作Zookeeper
可以通过图形化界面进行操作使用的工具是 zookeeper-dev-ZooInspector.jar 连接到我的zk之后: 1.Java操作zk 依赖: <dependency> < ...