分别使用http,express,koa请求第三方接口

今天又再次恶补了一下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();
posted @ 2017-07-09 22:44  海客无心x  阅读(7858)  评论(0编辑  收藏  举报