zoukankan      html  css  js  c++  java
  • 分别使用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();
    
  • 相关阅读:
    error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 E:OCX
    JQUERY解析XML IE8的兼容问题
    IE11下,IIS7.5不自动生成__doPostBack事件
    IE11无法支持Forms认证,,,也就是无法保存COOKIE
    IIS7.5真变态,服务器时间格式导致不生成WebResource.axd
    django ajax MTV与MVC 多对多创建方式
    django F与Q查询 事务 only与defer
    模型层
    模板层(模板语法)
    django 路由层 伪静态网页 虚拟环境 视图层
  • 原文地址:https://www.cnblogs.com/can-i-do/p/7143527.html
Copyright © 2011-2022 走看看