2017-12-22 98 views
11

Tôi đang sử dụng khâu lược đồ từ xa trên máy chủ middlware của mình. Tôi có thể lấy lược đồ từ xa trên máy chủ trung gian, định nghĩa tuyến đường của tôi như thế này trên máy chủ trung gian.Cách chuyển tiếp tiện ích mở rộng từ một máy chủ đến máy chủ trung gian

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 
    } 
    }; 
})); 

Tôi nhận được kết quả của truy vấn trong kết quả nhưng không nhận được phản ứng tiêu đề và thông tin bổ sung mà là một phần của phần mở rộng mà tôi đang bổ sung trên máy chủ khác của tôi, nơi phân giải là ở đó.

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

Điều gì có thể là vấn đề? Đây là cách tôi thêm tiêu đề phản hồi và thông tin bổ sung trên máy chủ khác của tôi trong tiện ích mở rộng. Tôi gỡ lỗi bên dưới mã nơi dữ liệu tiện ích có sẵn. Điều này không được chuyển đến máy chủ trung gian.

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 
    }; 
} 

Luồng ứng dụng của tôi là tôi đang gọi tuyến trung gian rồi một tuyến máy chủ khác sử dụng ghép giản đồ từ xa. Tôi muốn mở rộng mà tôi đang thêm vào một máy chủ nên được chuyển tiếp đến máy chủ middleware của tôi trong phản ứng.

Trả lời

2

bạn có console.log() yêu cầu không? Tôi khá chắc chắn rằng bất cứ điều gì bạn nhận được trong các chức năng mở rộng liên quan đến tiêu đề mà bạn muốn đầu ra sẽ được trong yêu cầu, bởi vì nó là phần mềm trung gian trên máy chủ, phản ứng là cái gì bạn sẽ sửa đổi trước khi gửi nó đến chức năng tiếp theo hoặc quay lại khách hàng.

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 
    }; 
} 
+0

Không cần thiết ':' và '=>'. Mã ví dụ ban đầu đang sử dụng ký tự viết tắt của đối tượng cho các định nghĩa phương thức. – aaronjkrause

+0

@aaronjkrause Tôi chỉ lướt qua điều đó trong tài liệu, cảm ơn vì đã chỉ ra điều đó. – RickyM

+0

@RickyM Tôi thấy yêu cầu nhưng 'apiHeaders: [], additionalInfo: {},' trống ở đó. –

Các vấn đề liên quan