是否可以使用 Apollo Server 在服务器端本地执行突变或查询

Posted

技术标签:

【中文标题】是否可以使用 Apollo Server 在服务器端本地执行突变或查询【英文标题】:Is it possible to execute a mutation or query locally at server side with Apollo Server 【发布时间】:2018-06-12 16:36:12 【问题描述】:

我想知道。

例子:

1- 到达端点 GET /createNew

2- 我运行了一个我定义的突变:

apolloserver.mutation(mutation_query).then((response)=>res.status(200))

3- 向数据库添加一个新条目,并向客户端返回一个 JSON 字符串

这样的东西存在吗? apolloserver 对象在运行时可用吗?

我正在使用 NodeJS + Express

【问题讨论】:

【参考方案1】:

我搞定了

首先我们启动对象:

import express from 'express';
import  graphql  from 'graphql';
const context = require('./context'); //this is the object to be passed to each resolver function
const schema = require('./schema'); //this is the object returned by makeExecutableSchema(typeDefs, resolvers)
const app = express();

然后,例如,如果我们想在端点 GET /execute 上运行查询

app.get('/execute', function(req, res)
    var query = `
        query myQueryTitle
            queryName
                _id,
                ...
            
        
    `;

    graphql(schema, query, null, context)
    .then((result) => 
        res.json(result.data.queryName);
    );
)

所以每当我们想要运行查询或突变时,我们调用 graphql 传递 schemarequestString/querycontext 对象

这可能与graphqlExpress的实例共存

【讨论】:

虽然这可行,但它实际上并没有通过 Apollo Server 执行,而是使用了 graphql.js 中的 execute 方法。只要您不使用任何 Apollo 中间件(例如 Apollo Engine)就可以了,因为它们不会在这种情况下运行。 这个问题有解决方案吗@PetrBela - 我正在研究这样的解决方案 - 我们正在使用 Apolloe Server ?

以上是关于是否可以使用 Apollo Server 在服务器端本地执行突变或查询的主要内容,如果未能解决你的问题,请参考以下文章

使用替代 GraphQL 客户端连接到 Apollo Server

是否可以为 Apollo Server 附带的 GraphQL Playground 定义 HTTP 标头?

Apollo-Server-Express 未收到上传对象

Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接

如何使用 apollo 服务器对 graphQl 中的数据进行排序?

Apollo Server 2.x express 中间件