Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从nodejs中的另一个lambda调用graphql lambda?_Node.js_Amazon Web Services_Aws Lambda_Graphql - Fatal编程技术网

Node.js 如何从nodejs中的另一个lambda调用graphql lambda?

Node.js 如何从nodejs中的另一个lambda调用graphql lambda?,node.js,amazon-web-services,aws-lambda,graphql,Node.js,Amazon Web Services,Aws Lambda,Graphql,我按照以下说明创建了graphql lambda: 它可以与API网关配合使用。但是,我需要从另一个lambda调用这个lambda函数。我想我需要在另一个lambda函数中放入ApolloClient,以便发送graphql请求。但是,它不起作用,因为我无法选择调用lambda的正确链接。 因此,我正在寻找如何以编程方式构建graphql请求。我可以将请求作为事件发送以触发graphql lambda 有办法吗 例如,如果我有一个变异请求,如: mutation sendMessage {

我按照以下说明创建了graphql lambda: 它可以与API网关配合使用。但是,我需要从另一个lambda调用这个lambda函数。我想我需要在另一个lambda函数中放入
ApolloClient
,以便发送graphql请求。但是,它不起作用,因为我无法选择调用lambda的正确链接。 因此,我正在寻找如何以编程方式构建graphql请求。我可以将请求作为事件发送以触发graphql lambda

有办法吗

例如,如果我有一个变异请求,如:

 mutation sendMessage {
      sendMessage(text: "hello"){
      text
    }
我需要找到一种方法将请求转换为以下有效负载:

{"id":"1","type":"start","payload":{"variables":{},"extensions":{},"operationName":"sendMessage","query":"mutation sendMessage {\\n  sendMessage(text: \\"hello\\") {\\n    text\\n    __typename\\n  }\\n}\\n"}}

然后我将此有效负载发送到graphql lambda函数

您可以使用graphql客户端通过使用HTTP的API网关端点执行graphql请求

假设您有一个指向graphQL服务器的API网关端点,您可以从另一个lambda向该端点执行graphQL请求

对服务器的GraphQL查询只是以某种方式格式化的常规
POST
请求。因此,如果需要,可以使用任何服务器端HTTP客户端来执行该请求。然而,使用像这样的库会使它简单得多

您可以使用包执行服务器端graphQL请求

import { request } from 'graphql-request'

const endpoint="https://your-api-gateway-endpoint";

const headers = {
  "x-api-key": 'api-gateway-key' // if your endpoint requires API key
};

const client = new GraphQLClient(endpoint, { headers });

const query = `{
  mutation sendMessage {
      sendMessage(text: "hello"){
      text
  }
}`;

const data = await client.request(query);
console.log(JSON.stringify(data, undefined, 2));


您可以使用graphQL客户端通过API网关端点使用HTTP执行graphQL请求

假设您有一个指向graphQL服务器的API网关端点,您可以从另一个lambda向该端点执行graphQL请求

对服务器的GraphQL查询只是以某种方式格式化的常规
POST
请求。因此,如果需要,可以使用任何服务器端HTTP客户端来执行该请求。然而,使用像这样的库会使它简单得多

您可以使用包执行服务器端graphQL请求

import { request } from 'graphql-request'

const endpoint="https://your-api-gateway-endpoint";

const headers = {
  "x-api-key": 'api-gateway-key' // if your endpoint requires API key
};

const client = new GraphQLClient(endpoint, { headers });

const query = `{
  mutation sendMessage {
      sendMessage(text: "hello"){
      text
  }
}`;

const data = await client.request(query);
console.log(JSON.stringify(data, undefined, 2));


我考虑过这个解决方案,但它会为请求提供更多的延迟。它将请求发送到API网关,网关将其转发到不太好的lambda。有没有一种方法可以在lambda中生成graphql请求负载并将其直接发送到graphql lambda?我认为使用lambda调用不是一个好主意,即使它是可能的。由于您的客户机lambda将一直运行到您的服务器lambda,因此您将为更高的lambda使用率付费。延迟将以毫秒为单位,所以我不会担心。我考虑过这个解决方案,但它会为请求提供更多的延迟。它将请求发送到API网关,网关将其转发到不太好的lambda。有没有一种方法可以在lambda中生成graphql请求负载并将其直接发送到graphql lambda?我认为使用lambda调用不是一个好主意,即使它是可能的。由于您的客户机lambda将一直运行到您的服务器lambda,因此您将为更高的lambda使用率付费。延迟将以毫秒为单位,所以我不会担心。