今天又再次恶补了一下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. BZOJ4009:[HNOI2015]接水果

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  2. 关系运算符 逻辑运算符 if 语句 switch语句

    1. BOOL类型 BOOL isRightOrNo = YES; isRightOrNo = 56;//可以打印出来,在C语言中,非0即真 printf("%d\n" , isR ...

  3. centos7 中文乱码解决方法

    centos7 中文乱码解决方法 标签(空格分隔): centos7 1.查看安装中文包: 查看系统是否安装中文语言包 (列出所有可用的公共语言环境的名称,包含有zh_CN) # locale -a ...

  4. content-disposition attachment filename 在Firefox和IE中得到不同的结果

    在Firefox中需要把filename 用双引号包起来,才能得到想要的名字,不然如果含有空格,会丢掉空格后面的部分.而IE会把空格转为_,因此也需要HttpUtility.UrlPathEncode ...

  5. shell入门-grep2

    案例介绍 搜索关键词带‘root’的行 并输出行号 [root@wangshaojun ~]# cg -n 'root' 1.txt1:root:x:0:0:root:/root:/bin/bash1 ...

  6. servlet课堂笔记

    1.servlet生命周期: 1> 加载和实例化 2> 初始化 init() 3> 处理请求 service()->doGet()/doPost() 4> 销毁 dest ...

  7. zabbix的配置

    一.网络自动发现: 1.zabbix的网络自动发现是一个非常强大的功能,该功能可以完成以下工作. a.快速发现并添加主机. b.简单的管理. c.随着环境的改变而快速搭建监控系统. 2.网络发现基于以 ...

  8. 局域网中使用的IP地址有哪些?

    当我们建设一个局域网的时候,需要为网络中的每台计算机分配一个IP地址.那么都有哪些IP地址可以使用在局域网中呢?局域网中的IP地址有什么规定呢? 在局域网中,我们是不能使用如202.106.45.11 ...

  9. tensorflow placeholder

    placeholder 是 Tensorflow 中的占位符,暂时储存变量. Tensorflow 如果想要从外部传入data, 那就需要用到 tf.placeholder(), 然后以这种形式传输数 ...

  10. Entity Framework Code-First(5):Code First Conventions

    Code First Conventions: We have seen how EF Code-First creates DB tables from domain classes in the ...