如何从 Node.js/Express 服务器调用 GraphQL API?

Posted

技术标签:

【中文标题】如何从 Node.js/Express 服务器调用 GraphQL API?【英文标题】:How to call GraphQL API from Node.js/Express server? 【发布时间】:2019-03-20 19:04:39 【问题描述】:

我最近为我的 Express 服务器实现了一个架构和一些解析器。我通过/graphql 成功测试了它们,现在我想调用我在从 REST API 访问时实现的查询,如下所示:

//[...]
//schema and root correctly implemented and working
app.use('/graphql', graphqlHTTP(
  schema: schema,
  rootValue: root,
  graphiql: true,
));

//I start the server
app.listen(port, () => 
  console.log('We are live on ' + port);
);

//one of many GET handlers
app.get("/mdc/all/:param", function(req, res) 
    //call one of the (parametrized) queries here
    //respond with the JSON result
);

如何在 GET 处理程序中调用我用 GraphQL 定义的查询?如何向它们传递参数?

谢谢!

【问题讨论】:

你想从那条路线返回什么? 现在什么都没有,我想返回一些包含查询结果的 JSON 并使用 AXAJ 从前端检索它。 【参考方案1】:

基本上你可以使用 http post 方法从 GraphQL API 中获取数据,但是这里使用 node-fetch 的非常好的解决方案来安装它:

npm install node-fetch --save

使用它的代码是:

const fetch = require('node-fetch');

const accessToken = 'your_access_token_from_github';
const query = `
  query 
    repository(owner:"isaacs", name:"github") 
      issues(states:CLOSED) 
        totalCount
      
    
  `;

fetch('https://api.github.com/graphql', 
  method: 'POST',
  body: JSON.stringify(query),
  headers: 
    'Authorization': `Bearer $accessToken`,
  ,
).then(res => res.text())
  .then(body => console.log(body)) // "data":"repository":"issues":"totalCount":247
  .catch(error => console.error(error));

此解决方案取自 here

【讨论】:

【参考方案2】:

您可以使用graphql-request。

import  request, GraphQLClient  from 'graphql-request'

// Run GraphQL queries/mutations using a static function
request(endpoint, query, variables).then((data) => console.log(data))

// ... or create a GraphQL client instance to send requests
const client = new GraphQLClient(endpoint,  headers:  )
client.request(query, variables).then((data) => console.log(data))

【讨论】:

以上是关于如何从 Node.js/Express 服务器调用 GraphQL API?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Node.js Express执行Python函数[复制]

上传图片文件到服务器node.js express axios

如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?

每次在 Node.js (Express.js) 中发出 API 请求之前,如何简化 Fetching Auth token?

如何从 Node.js / Express 应用程序的 Mongoose 预挂钩中查询?

如何从 Node.js / Express 应用程序的 Mongoose 预挂钩中查询?