美文网首页
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