最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何从节点微服务调用其他的REST API,并将结果发送作为响应?

运维笔记admin10浏览0评论

如何从节点微服务调用其他的REST API,并将结果发送作为响应?

如何从节点微服务调用其他的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)
    })
};
发布评论

评论列表(0)

  1. 暂无评论