分別使用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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM