如何从节点微服务调用其他的REST API,并将结果发送作为响应?
目前我正在试图实现一个BFF(后端对前端架构)。
使用request-promise
库我可以成功地击中对方微服务,但无法返回结果作为来自BFF微服务的响应。
每次它返回这个结果Promise { pending }
待定状态,可能有人请帮助我在这?
我的主要问题是要知道如何从我们正在打击和返回从微服务被击中另一种结果的其他微服务接收数据到BFF微服务。
或者,如果有人可以帮助我,让知道如何从内部的任何承诺.then
访问结果?
流程是这样的:
client(ios/android)===(sends request)==>BFF Microservice==>BP microservice
(BFF微服务处理请求,并返回结果的来自其它微服务接收的基础上,响应)
这是调用另一个微服务的microService代码:
import yagmodel from '../../lib/models/yag-model'
import {errorsList} from '../../lib/errors/errorsList'
import request from 'request-promise'
import config from 'config'
//template below to call the REST APIs of other microservices.
export async function getAllBP (req,res) {
let yagresponse// this varaible is defined to get data from inside(rs.then )
const username= req.swagger.params.username.value
const authheader= req.swagger.params.Authorization.value
console.log("Authorization:"+authheader)
let rs= await yagmodel.bp(username,authheader)
console.log(rs)
rs.then((response)=>{
// console.log(response.body)
yagresponse=response.body
//console.log(rsp)
}).catch((err)=>{
console.log(err)
console.log('errorstatuscode:'+err.statusCode)
})
res.status(200).send(yagresponse)
}
yag-model.js
代码:
import {errorsList} from '../../lib/errors/errorsList'
import request from 'request-promise'
module.exports.bp = async function getBP(username,authheader){
const options={
uri: `http://localhost:4000/Health/BP/`+username,
json: true,
resolveWithFullResponse: true,
headers: {
'Content-Type': 'application/json; charset=utf-8',
'Accept': 'application/json; charset=utf-8',
'Authorization':authheader
},
method: 'GET'
}
return request(options).then ((response)=>{
return response.body
}).catch((err)=>{
console.log(err)
console.log('errorstatuscode:'+err.statusCode)
})
}
回答如下:
我觉得你混合与承诺,当你可以只用等待匹配等待运营商。
我创建你的代码的简化版本:
YAG-model.js
const request = require('request-promise');
module.exports.bp = async function getBP () {
const options = {
uri: `https://api.postcodes.io/random/postcodes`,
json: true,
resolveWithFullResponse: true,
method: 'GET'
};
return request(options).then((response) => {
return response.body
}).catch((err) => {
console.log(err);
console.log('errorstatuscode:' + err.statusCode)
})
};
如何从节点微服务调用其他的REST API,并将结果发送作为响应?
目前我正在试图实现一个BFF(后端对前端架构)。
使用request-promise
库我可以成功地击中对方微服务,但无法返回结果作为来自BFF微服务的响应。
每次它返回这个结果Promise { pending }
待定状态,可能有人请帮助我在这?
我的主要问题是要知道如何从我们正在打击和返回从微服务被击中另一种结果的其他微服务接收数据到BFF微服务。
或者,如果有人可以帮助我,让知道如何从内部的任何承诺.then
访问结果?
流程是这样的:
client(ios/android)===(sends request)==>BFF Microservice==>BP microservice
(BFF微服务处理请求,并返回结果的来自其它微服务接收的基础上,响应)
这是调用另一个微服务的microService代码:
import yagmodel from '../../lib/models/yag-model'
import {errorsList} from '../../lib/errors/errorsList'
import request from 'request-promise'
import config from 'config'
//template below to call the REST APIs of other microservices.
export async function getAllBP (req,res) {
let yagresponse// this varaible is defined to get data from inside(rs.then )
const username= req.swagger.params.username.value
const authheader= req.swagger.params.Authorization.value
console.log("Authorization:"+authheader)
let rs= await yagmodel.bp(username,authheader)
console.log(rs)
rs.then((response)=>{
// console.log(response.body)
yagresponse=response.body
//console.log(rsp)
}).catch((err)=>{
console.log(err)
console.log('errorstatuscode:'+err.statusCode)
})
res.status(200).send(yagresponse)
}
yag-model.js
代码:
import {errorsList} from '../../lib/errors/errorsList'
import request from 'request-promise'
module.exports.bp = async function getBP(username,authheader){
const options={
uri: `http://localhost:4000/Health/BP/`+username,
json: true,
resolveWithFullResponse: true,
headers: {
'Content-Type': 'application/json; charset=utf-8',
'Accept': 'application/json; charset=utf-8',
'Authorization':authheader
},
method: 'GET'
}
return request(options).then ((response)=>{
return response.body
}).catch((err)=>{
console.log(err)
console.log('errorstatuscode:'+err.statusCode)
})
}
回答如下:
我觉得你混合与承诺,当你可以只用等待匹配等待运营商。
我创建你的代码的简化版本:
YAG-model.js
const request = require('request-promise');
module.exports.bp = async function getBP () {
const options = {
uri: `https://api.postcodes.io/random/postcodes`,
json: true,
resolveWithFullResponse: true,
method: 'GET'
};
return request(options).then((response) => {
return response.body
}).catch((err) => {
console.log(err);
console.log('errorstatuscode:' + err.statusCode)
})
};