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