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代理网络请求的更多相关文章

  1. AndroidInject项目使用动态代理增加对网络请求的支持

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3540427.html AndroidInject项目是我写的一 ...

  2. [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)

    [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP) 原文链接:https://www.cnblogs.com/blog5277/p/9334560.html 原 ...

  3. android通过fiddler代理,抓取网络请求

    安装fiddler过程省略 1, 2, 3, 4,手机需要跟电脑处于同一局域网,设置网络代理为电脑在局域网内的ip,端口为3步设置的port 5,电脑就可以通过fiddler监控手机的所有网络请求了( ...

  4. iOS_网络请求_代理方式

    #pragma mark - 网络请求代理方式(异步) - (IBAction)DelegateButtonDidClicked:(UIButton *)sender { // 1.拼接 urlStr ...

  5. 十. Axios网络请求封装

    1. 网络模块的选择 Vue中发送网络请求有非常多的方式,那么在开发中如何选择呢? 选择一:传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢?非常好解释配置和调用方式等非常混 ...

  6. Jest中Mock网络请求

    Jest中Mock网络请求 最近需要将一个比较老的库修改为TS并进行单元测试,修改为TS还能会一点,单元测试纯粹是现学现卖了,初学Jest框架,觉得在单元测试中比较麻烦的就是测试网络请求,所以记录一下 ...

  7. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

  8. 【Swift】Alamofile网络请求数据更新TableView的坑

    写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...

  9. nginx android app 慢网络请求超时

    最近遇到了android 在慢网络下面请求服务器报 java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by ...

随机推荐

  1. ETL Automation完整安装方法_(元数据存放在mysql数据库)

    安装前介质准备: DBI-1.636.tar.gz DBD-mysql-4.037.tar.gz ETL.tar mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz P ...

  2. ORACLE SQL性能优化(全)

    ORACLE SQL性能优化(全) http://wenku.baidu.com/view/b2aaba3887c24028915fc337.html

  3. 搭建React Native开发环境

    搭建React Native开发环境 本文档是Mac下搭建的环境,针对的目标平台不同,以及开发 iOS 和 Android 的不同,环境搭建也有差异. Github地址:https://github. ...

  4. C# 操作World生成报告

    直接上代码 using System; using System.IO; using System.Data; using Word = Microsoft.Office.Interop.Word; ...

  5. VS2005 调试不能设置断点的解决办法

    [ 1] 以前也遇到过同样的问题,但没有问个为什么,也没有探个毕竟.昨天调试一个DLL,添加输出信息吧,太麻烦而且不轻易定位, 但设置断点后按“F5”,断点不可用,气泡提示“当前不会命中断点,还没有为 ...

  6. Android-addToBackStack使用和Fragment执行流程

    文章来源:https://blog.csdn.net/wenxuzl99/article/details/16112725 在使用Fragment的时候我们一般会这样写: FragmentTransa ...

  7. input光标位置

    兼容谷歌火狐-input光标位置 input框在没有添加任何效果的情况下,输入文字后光标始终在最后的位置,谷歌||火狐效果一样 但是在给input加入点击事件后 谷歌:input框插入文字后,光标会自 ...

  8. launchMode之的几种取值

    Activity的launchMode launchMode之standard   ·标准模式.每次激活Activity时均在当前任务栈中创建新的实例. 在配置文件里把activity节点的属性配置为 ...

  9. Linux就该这么学--命令集合4(文件目录管理命令)

    1.touch命令用于创建空白文件与修改文件时间:(touch [选项] [文件]) 对于在Linux中的文件有三种时间: 更改时间(mtime):内容修改时间(不包括权限的) 更改权限(ctime) ...

  10. SecureCRT中使用VBs脚本自动telnet登陆

    查看SecureCRT帮助文档: Help-> Help Topics->Scripting -> Script Objects Reference -> Session Ob ...