今天又再次惡補了一下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();
