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