今天又再次恶补了一下http的内容,确切地说是node.js里面的http的内容,啊,百度了半天express怎么请求第三方接口,结果发现自己买的入门书籍都有这个内容。舍近求远,我真是醉了。还有百度上竟然没有express请求第三方接口的内容??是因为太简单了吗?(确实挺简单orz),,明天上谷歌在搜一下,(比较一下百度和谷歌)顺便把今天的成果记录下来,有点晚,待更。

后续还会有callback转为promise的代码,但是因为本人对promise都是初学,http基础也薄弱,还是各个击破比较好,暂时就先不写了。

HTTP已经演变成了并非仅用于交换最终渲染,展示给用户的标记文本,而且它还是服务器在不同的网络环境中传递数据的一种方式


  • 1.首先是callback方式的express框架的请求

    先贴代码

    server.js
let fs = require('fs');
let qs = require('querystring');
let http = require('http');
let get_json_data = () => {
let content = fs.readFileSync('./mock/test.json', 'utf-8');
return content;
};
var get_search_data = function(start, end, keyword,fn) {
var data = {
s: keyword,
start: start,
end: end
};
data = qs.stringify(data);
var http_request = {
host: 'dushu.xiaomi.com',
port: 80,
path: '/store/v0/lib/query/onebox?' + data
}
http.request(http_request, function(_res) {
var content = '';
_res.setEncoding('utf-8');
_res.on('data', function(chunk) {
content += chunk;
});
_res.on('end',function(){
return fn(null,content);
});
}).end();
}
module.exports = {
GetJsonData: get_json_data,
GetSearchData: get_search_data
};

router.js(也可以直接写在app.js里面,不过那样的话,直接 app.get或者app.[http方法]就可以了,我这样写只是为了让结构更清晰

let express=require('express');
let router=express.Router();
let qs=require('querystring');
let service=require('../service/server');
let http=require('http');
router.get('/',(req,res)=>{
res.setHeader('Cache-Control','no-cache,no-store,must-revalidate');
res.setHeader('pragma','no-cache');
res.setHeader('Expires','0');
res.send('hello,world');
});
router.get('/test',(req,res)=>{
res.render('test',{name:'hahah'});
});
router.get('/api_test',(req,res)=>{
res.send(service.GetJsonData());
});
router.get('/api_search',(req,res,next)=>{
//console.log(req._parsedUrl); // Url{protocol:null,path:'/api_serach?keyword=3'}各种方法
//console.log(req._parsedUrl.query); //keyword=3
let search_key=qs.parse(req._parsedUrl.query);
//{keyword=3}
let {start,end,keyword}=search_key;
//es6的解构赋值
service.GetSearchData(start,end,keyword,function(err,content){
if(err) return next(err);
res.send(content);
});
});
module.exports=router;

测试截图


  • 2.用HTTP的方式请求,其实差不多
let http=require('http');
let qs=require('querystring');
var search_key={
s:123
};
search_key=qs.stringify(search_key);
console.log(search_key);
var body_request={
hostname:'dushu.xiaomi.com',
path:'/store/v0/lib/query/onebox?'+search_key,
port:80
};
http.request(body_request,(res)=>{
var content='';
res.setEncoding('utf-8');
res.on('data',(chunk)=>{
content+=chunk;
});
res.on('end',()=>{
console.log(content);
})
}).end();

分别使用http,express,koa请求第三方接口的更多相关文章

  1. VUE 使用axios请求第三方接口数据跨域问题解决

    VUE是基于node.js,所以解决跨域问题,设置一下反向代理即可. 我这里要调用的第三方接口地址为 http://v.juhe.cn/toutiao/index?type=top&key=1 ...

  2. java 请求第三方接口 GET\POST 实现方法

    (1)GET方法 /** * 根据高德地图api获取位置信息 * @return * */ public static String getMapAddInfo(String httpurl) { H ...

  3. 【spring】RestTemplate发送请求,请求第三方接口 的几种请求方式POST,GET,DELETE,PUSH

    org.springframework.web.client.RestTemplate 参考地址:http://www.cnblogs.com/UniqueColor/p/7123347.html G ...

  4. Vue请求第三方接口跨域最终解决办法!2020最终版!

    废话少说,再百度的近三个小时尝试了近10种方法无解后,终于皇天不负有心人! 这个vue axios 跨域问题被我解决了! 需求:请求客户端ip地址获取客户ip,再根据ip获取用户位置 工具:Vue,a ...

  5. PHP请求第三方接口的函数

    <?php public function HttpGet($url){ $curl = curl_init (); curl_setopt ( $curl, CURLOPT_URL, $url ...

  6. PHP通过XML报文格式的POST请求方式,与第三方接口交互(发送xml,获取XML,并解析xml步骤)

    开发者端:发送请求,并接收结果 <?php // 下面的demo,实现的功能如下: // 1-开发者需要判断一个用户是否存在,去请求第三方接口. // 2-与第三方接口的通信,是以xml格式传送 ...

  7. C# HTTP请求对外接口、第三方接口公用类

    /// <summary> /// 网络数据请求公共函数 /// </summary> public class HttpWebRequestCommon { #region ...

  8. webapi+Task并行请求不同接口实例

    标题的名称定义不知道是否准确,不过我想表达的意思就是使用Task特性来同时请求多个不同的接口,然后合并数据:我想这种场景的开发对于对接过其他公司接口的人不会陌生,本人也是列属于之内,更多的是使用最原始 ...

  9. Express/Koa/Hapi

    Express/Koa/Hapi 本文翻译自: https://www.airpair.com/node.js/posts/nodejs-framework-comparison-express-ko ...

随机推荐

  1. android:layout_weight的真实含义/android:layout_gravity的条件

    用layout_weight的时候,不要把宽度(或是高度,你想分配weight的那个)设成match_parent. android:layout_weight只适用于LinearLayout and ...

  2. noip不知道哪年 货车运输

    题意:最大生成树上找 q组两个点的lca 然后求出u->lca->v这条路径上的最小边 倍增大法好 # include <iostream> # include <std ...

  3. vue 常见的新增、编辑、查看公用同一个页面

    用vue开发经常会碰到,一个功能的新增.编辑.查看公用同一个页面,如果是页面暂且不提. 但是弹框,很多人会发现,如果是点击编辑,取消,再点新增,弹框上面是会有残留数据的,为什么会这样呢,因为在点编辑的 ...

  4. JS图表工具 ---- Highcharts

    Highcharts 是一个用纯 JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是 web 应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用. Hi ...

  5. 第一个 IronPython 的 ASP.NET 程序

    今天试验了在 Visual Studio 中集成使用 IronPython,记录如下. 首先,下载一个 IronPython 1.0 的 binary,解压后,将目录路径 配置到环境变量 Path 中 ...

  6. 卸载DCOS

    再次安装,已经是隔了两天,我打算换一台机器作为boot机器,但是发现报错,告知部署设备已经安装了dcos:看来需要卸载:uninstall-master.sh /opt/mesosphere/bin/ ...

  7. python setuptools安装

    执行# python setup.py install 时发生如下错误 Traceback (most recent call last): File "setup.py", li ...

  8. Ubuntu中Could not get lock /var/lib/dpkg/lock

    找出所有的 apt 以及 apt-get 进程: ps -A | grep apt-get 杀死进程: processnumbe 删除锁定文件: rm /var/lib/dpkg/loc 之后像下面这 ...

  9. HDU1257(简单DP)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  10. 查看Linux内核版本的命令

    方法一: 命令: uname -a  作用: 查看系统内核版本号及系统名称  方法二:  命令: cat /proc/version 作用: 查看目录"/proc"下version ...