如何将graphql查询的结果作为文件发送?

Posted

技术标签:

【中文标题】如何将graphql查询的结果作为文件发送?【英文标题】:How to send the result of graphql query as a file? 【发布时间】:2020-03-20 10:08:51 【问题描述】:

我正在使用 Apollo 服务器实现一个 graphQL 服务器。我想将查询的响应作为文本文件而不是 JSON 响应发送。谁能帮助我如何在 Apollo 服务器中执行此操作。我正在使用 NodeJS 进行服务器实现。

【问题讨论】:

我的回答对你有帮助吗? 感谢您的回答。我确实试过这个。但是对于 Apollo 服务器,这不起作用。 我现在想出一个更完整的答案,但是 graphqlHTTP 不可能做到这一点。相反,您需要原始的graphql 库,或其他一些手动查询的方式,以便我们可以(临时)将结果保存在变量中。然后,要么创建一个临时文件,要么直接作为缓冲区发送,并可选择将Content-Disposition 标头设置为attachment; filename=response.json。或者如果可能的话,只需设置Content-Disposition: attachment; filename=result.json 【参考方案1】:

使用 app Express js 发送文件:

app.get('/URL', (req, res) => res.download('./yourFile.txt'))

并将您的 graphql 查询结果写入 yourFile.txt

var fs = require("fs");

var data = "your_data_graphql";

fs.writeFile("temp.txt", data, (err) => 
  if (err) console.log(err);
  console.log("Successfully Written to File.");
);

【讨论】:

【参考方案2】:

如果您想使用 Apollo Server 而不是原版的 graphql 库,请尝试将插件添加到 plugins 配置中:

const server = new ApolloServer(
  typeDefs,
  resolvers,

  // You can import plugins or define them in-line, as shown:
  plugins: [
    
      requestWillStart(reqCtx) 
        return 
          willSendResponse(ctx) 
            ctx.response.http.headers.set('Content-Disposition', 'attachment; filename=result.json');
          
        
      
    
  ],
)

参考:https://www.apollographql.com/docs/apollo-server/integrations/plugins/#willsendresponse

【讨论】:

以上是关于如何将graphql查询的结果作为文件发送?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apollo GraphQL 查询结果作为另一个查询的输入?又名:请求链

如何将hive查询结果导出成txt文件

如何使用 GatsbyJS 和 GraphQL 查询和显示包含多个图像的文件夹

GraphQL 以数组形式返回查询结果

如何从 MySQL 查询中将 json 返回到 GraphQL?

如何将 GraphQL 查询作为字符串而不是对象导入