美文网首页
10.5为网站添加接口之线上HTTP接口调用

10.5为网站添加接口之线上HTTP接口调用

作者: Aurochsy | 来源:发表于2018-09-22 22:37 被阅读0次

    Chapter:10.服务端环境搭建和开发过程

    10.5为网站添加接口之线上HTTP接口调用

    在企业里很少会用Node.js连接数据库,因为性能不高,通常是用Node.js调用后端已经写好的http格式的接口

    这里以书城的搜索接口为例

    1.添加服务层代码

    service目录里的webAppService.js文件添加代码:

    /*10.5为网站添加接口之线上HTTP接口调用*/
    exports.get_search_data = function(start, end, keyword) {//这三个参数是分别是开始结束页码,搜索关键字,小米书城的接口就是这样,就得这样写
        //上面三个参数是在app.js中通过读取地址栏中输入的地址读取的
        return function(cb) {//因为是一个异步的http的接口,所以要返回一个异步函数
            
            //引入库
            var http = require('http');//自带的http模块,这里用于发送请求
            var qs = require('querystring');//用于把对象转为http的查询参数格式
            //比如js里{"a":"1"}这样的object,并不能被后端接受到,要转为http://127.0.0.1/api?a=1这样的格式    
            //用传入的参数创建json对象
            var data = {
                s: keyword,
                start: start,
                end: end
            };
            
            var content = qs.stringify(data);//将json对象转格式为http的传参格式
            
            //构造request头,指定发送的接口地址,端口,路径(路由的位置),方法
            var http_request = {
                hostname: 'dushu.xiaomi.com',
                port: 80,
                path: '/store/v0/lib/query/onebox?' + content,
                method: 'GET'
            };
            
            //发送http请求
            req_obj = http.request(http_request, function(_res) {//第二个参数是处理返回的响应对象的回调函数
                //注意下面这一堆都是定义的回调函数里的内容
                
                var content='';//用于保存返回的内容
                _res.setEncoding('utf8');
                
                //监听到数据返回后,将之连接到一起,这里的chunk是一批数据,数据是分批返回的
                _res.on('data', function(chunk) {
                    content += chunk;
                });
    
                //触发end事件后才将全部数据返回
                _res.on('end', function(e) {
                    cb(null,content);//这是callback方法,参数1是错误代码(这里写null最简单),参数2是返回的内容;注意这个cb是上面return的异步函数的参数
                });
    
            });
    
            req_obj.on('error', function(e) {//监听响应出错的情况
    
            });
    
            req_obj.end();//终止请求
        }
    }
    
    

    2.添加接口代码

    app.js里添加代码 (监听接口的代码不用重复添加)

    var querystring=require('querystring');//10.5用于实现http格式参数转为object格式
    
    /*10.5 为网站添加接口之线上HTTP接口调用 */
    app.use(controller.get('/ajax/search',function*(){
        this.set('Cache-Control','no-cache');
        var params = querystring.parse(this.req._parsedUrl.query);//读取输入的地址栏地址并将http参数转为object格式
        var start = params.start;
        var end = params.end;
        var keyword = params.keyword;
        this.body = yield service.get_search_data(start,end,keyword);
    }));
    
    //运行结果:运行该程序,到地址栏访问 localhost:3001/ajax/search?keyword=123 页面会显示dushu.xiaomi.com里对应关键字的搜索内容,也可以添加更多参数比如?keyword=123&start=10
    
    
    app.listen(3002);//设置监听端口
    console.log('koa server is started');
    

    相关文章

      网友评论

          本文标题:10.5为网站添加接口之线上HTTP接口调用

          本文链接:https://www.haomeiwen.com/subject/retfoftx.html