我正在研究如何使用 node.js 作为中间层将多个 REST API 调用组合成单个请求。(这样就省去了浏览器和服务器之间的往返)
首先,我使用了express
框架和request-promise
库,找到了如下解决方案:
var express = require('express');
var app = express();
var request = require('request-promise');
var port = process.env.PORT || 8003;
app.get('/merge', function(req, res) {
var data1, data2, data3;
request('http://localhost:8000/api1').then(function(body) {
data1 = JSON.parse(body);
return request('http://localhost:8000/api2');
})
.then(function(body) {
data2 = JSON.parse(body);
return request('http://localhost:8000/api3');
})
.then(function(body) {
data3 = JSON.parse(body);
var alldata = Object.assign({}, data1, data2, data3);
res.json(alldata);
})
});
该解决方案promise
基于request-promise
返回一个承诺,它允许我将 3 个 API 调用和 merge 链接在一起data1
,data2
并且data3
如上所述。
在Koa2(async/await)
如何做到这一点?
编辑,找到解决方案如下:
var koa = require('koa');
var serve = require('koa-static');
var route = require('koa-route');
const request = require('request-promise');
var app = new koa();
const main = async ctx => {
let name = await getName();
let city = await getCity();
let gender = await getGender();
ctx.response.body = `${name}${city}${gender}`;
};
function getName() {
return request('http://localhost:8000/api1');
};
function getCity() {
return request('http://localhost:8000/api2');
};
function getGender() {
return request('http://localhost:8000/api3');
};
app.use(route.get('/merge', main));
app.listen(3000);