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');
网友评论