如何将扩展从一台服务器转发到中间件服务器

时间:2017-12-22 07:19:14

标签: node.js express graphql graphql-js express-graphql

我在middlware服务器上使用远程架构拼接。我能够在中间件服务器上远程获取模式,在中间件服务器上定义我的路由。

app.use('/graphql', graphqlHTTP((request,res) => {
 const startTime = Date.now();
 return {
   schema: remoteSchema
   graphiql: false,
   extensions({ document, variables, operationName, result }) {
     return {
       // here I am not getting extensions which I have on my another server as below.
       console.log(res); // this does not have additional info and response headers
       console.log(result); // this only has response against the query
     }
   };
})); 

我在结果中得到了查询的结果,但没有得到响应标题和附加信息,这是我在其他解析器所在的服务器上添加的扩展的一部分。

{
    "data": {
        "records": {
            "record": [{
                    "id": 1,
                },
                {
                    "id": 2,
                }
            ],
        },
        "additionalInfo": {}
    },
    "extensions": {
        "info": {}
    }
}

可能是什么问题?这就是我在扩展程序中的另一台服务器上添加响应标头和其他信息的方法。我调试下面的扩展数据可用的代码。这不会传递给中间件服务器。

extensions({ document, variables, operationName, result }) {
   result.data.additionalInfo = res.additionalInfo;
   // extension to write api headers in response
   var headerObj = {};
   res.apiHeaders.forEach(element => {
     merge(headerObj, element);
   });
   result.headerObj = headerObj;
   return {
      information: headerObj
   };
}

我的应用程序流程是我使用远程架构拼接调用中间件路由然后另一个服务器路由。我希望我在另一台服务器上添加的扩展应该转发到响应中的中间件服务器。

1 个答案:

答案 0 :(得分:2)

你有console.log()请求吗?我非常确定你在扩展函数中得到的关于你想要输出的标题的任何内容都在请求中,因为它是服务器上的中间件,响应是你要在发送之前修改的内容它到下一个功能或回到客户端。

extensions({ document, variables, operationName, result }) {
    // console.log the request object to check the header information from the request.
    console.log(request);
    return {
        // This will fill the information key with all the headers in the request.
        information: reaquest.header
    };
}