koa2中间层转发第三方接口返回值

同步返回第三方接口数据

由于业务需要后台将第三方接口获取的数据处理后再发给前端,
所以出现 前端—>自己的服务—>第三方服务—>自己的服务—>前端 这样的流程
在一个http/https请求中内嵌另一个请求
需要做同步处理
在第三方接口返回完成后处理数据添加到 ctx.body 里

testApi.js (routes)

const router = require('koa-router')();
const jszwyApiService = require('../service/service');

router.prefix('/testApi')

router.post('/getCustomerList', async function (ctx, next) {
     
  await jszwyApiService.getCustomerList(ctx, next)
})

module.exports = router

service.js


var https = require('https');
let co = require('co');//异步控制器


/**获取列表 */
let getCustomerList = async (ctx, next) => {
     
    let request = ctx.request;
    let req_body = request.body;//从请求body中获取参数
    let req_query = request.query;
    let postdata = JSON.stringify(req_body);//转换成字符串
    var content = '';
    var body_request = {
     
        hostname: 'open.kdzwy.com',
        path: "/guanjia/customer/list?access_token=" + req_query.access_token + "&isBillDateNeeded=1",
        port: 443,
        method: "post",
        headers: {
     
            "Accept": "application/json",
            "Content-Type": "application/json;charset=UTF-8",
            'Content-Length': postdata.length//填写数据长度
        }
    };

	/***请求第三方接口***/
    function sendHttpRequest() {
     
    	/*****创建promise函数****/
        return new Promise(function (resolve, reject) {
     
        	/*****正常的发请求****/
            var req = https.request(body_request, (res) => {
     
				/*****设置编码****/
                res.setEncoding('utf-8');
                /*****合并返回数据****/
                res.on('data', (chunk) => {
     
                    content += chunk;
                });
                /*****数据获取完成后 resolve提交****/
                res.on('end', () => {
     
                    resolve({
      result: true, data: content });
                });
            })
			/*****发送请求体*****/
            req.write(postdata);
			/*****异常处理*****/
            req.on('error', function (err) {
     
                resolve({
      result: false, errmsg: err.message });
            });
			/*****结束请求*****/
            req.end();
        });
    }

    let res = await co(function* () {
     //使用生成器函数并且掉用请求 res保存返回内容
        let req_res = yield sendHttpRequest();
        /**********/
        //todo
        /**********/
        return req_res
    });
	/*****把接口返回的数据发送给前端*****/
    ctx.body = res 
}

module.exports = {
      getCustomerList }

你可能感兴趣的:(技术累积,post,nodejs,接口,http)