我有一个Neo4j数据库,其关系具有[:FRIENDS {since:"11/2015"}]等属性.我需要在GraphQl Schema中表示"since"属性.RELAY有一些称为"边缘"的东西显然这是他们实现这个功能的方式,但我没有使用RELAY .....我在Apollo中没有看到任何东西(也许我错过了它).有人能告诉我怎么做吗?
我们有一个应用实质上可以准确地实现本指南:
https://www.apollographql.com/docs/apollo-server/features/subscriptions/
太好了 我们取得了巨大的成功,该应用程序也表现出色。
但是,我们开始遇到的是各种大型公司阻止其内部员工的Web套接字的情况。当我们尝试升级到Web套接字时,它们返回403。
我一直在四处搜寻,但对于非Web套接字订阅,在Apollo社区中没有看到太多东西。一切指南/文章/示例均基于Web套接字。
理想情况下,我会使用socket.io之类的方法,这种方法可以回溯到长时间轮询,这是我一直在考虑的解决方案。但是每个人都只使用subscriptions-transport-ws库(我们使用它)。我找到了一个过时的库,称为subscriptions-transport-sse,但犹豫要尝试它,而我的服务器设置将需要大量重构。我们使用nestjs和Apollo GraphQL模块。
还有其他人解决过如何回退到其他运输方式吗?我实际上是在尝试避免编写自己的脚本,但看起来是那样选择还是切换到内置了它的另一个框架?
谢谢。
在 Apollo Federation 中,我面临这样的问题:每次我们对服务列表中的任何联合服务的架构进行更改时,都需要重新启动网关。据我所知,每次网关启动时,它都会收集所有架构并聚合数据图。但是有没有一种方法可以在不重新启动网关的情况下自动处理此问题,因为它也会关闭所有其他不受影响的 GraphQL 联合服务
Apollo GraphQL,@apollo/gateway
有没有办法通过 apollo 异常处理程序手动运行异常?
我 90% 的应用程序都在 GraphQL 中,但仍然有两个 REST 模块,我想统一处理异常的方式。
因此,GQL 查询会抛出标准的 200 错误数组,其中包含消息、扩展名等。
{
"errors": [
{
"message": { "statusCode": 401, "error": "Unauthorized" },
"locations": [{ "line": 2, "column": 3 }],
"path": [ "users" ],
"extensions": {
"code": "INTERNAL_SERVER_ERROR",
"exception": {
"response": { "statusCode": 401, "error": "Unauthorized" },
"status": 401,
"message": { "statusCode": 401, "error": "Unauthorized" }
}
}
}
],
"data": null
}
Run Code Online (Sandbox Code Playgroud)
其中 REST 使用 JSON 抛出真正的 401:
{
"statusCode": 401,
"error": "Unauthorized"
}
Run Code Online (Sandbox Code Playgroud)
那么我可以简单地捕获异常并以 Apollo …
在测试扩展类时,测试使用某些参数调用原始方法(来自基类)时遇到问题。我要测试的类是:
// ApiDataSource.js
import { RESTDataSource } from "apollo-datasource-rest";
export default class ApiDataSource extends RESTDataSource {
constructor() {
super();
this.baseURL = 'test';
}
//We add the authorization params to the get method
async get(path, params = {}, init = {}) {
return super.get(
path,
{
...params,
app_id: "test app id",
app_key: "test app key",
},
init
);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想模拟super.get()断言,当ApiDataSource.get()被调用时,super会使用授权参数调用该方法。
就像是:
// ApiDataSource.test.js
import ApiDataSource from './ApiDataSource'
// ...
test("adds the authorization parameters to …Run Code Online (Sandbox Code Playgroud) 我有一个使用 apollo-server-express 实现的后端项目。我研究了如何将其部署到 lambda,发现我需要使用 apollo-server-lambda 来实现此目的。
我不熟悉 GraphQL 和 AWS lambda。我不知道这两个包之间的区别 - apollo-server-express 和 apollo-server-lambda。
有没有简单的方法将 apollo-server-express 转换为 apollo-server-lambda?
或者是否可以将此实现直接部署到 AWS lambda?
我尝试使用无服务器部署这个项目,因为它是一个简单的快速应用程序,但它因 6 秒超时而失败。
所以,我在我的 iOS 应用程序中运行了一个 apollo 服务器和一个 apollo 客户端。
我正在尝试实施身份验证过程。按照阿波罗有关授权和身份验证的文档,我最终尝试了他们提供的代码:
context: ({ req }) => {
throw new AuthenticationError('you must be logged in');
},
Run Code Online (Sandbox Code Playgroud)
但是,在测试代码时,我发现抛出错误,无论是 javascript 错误还是 apollo 错误,它总是会发回 http 400 错误:
Error: Response not successful: Received status code 400
at new ApolloError (errors.cjs.js:31)
at core.cjs.js:1493
at both (utilities.cjs.js:963)
at utilities.cjs.js:956
at tryCallTwo (core.js:45)
at doResolve (core.js:200)
at new Promise (core.js:66)
at Object.then (utilities.cjs.js:956)
at Object.error (utilities.cjs.js:964)
at notifySubscription (Observable.js:140)
Run Code Online (Sandbox Code Playgroud)
认证错误不会被发回。即使当我抛出自定义错误时,使用自定义状态代码和所有内容它总是返回相同的错误。
难道我做错了什么 ?或者这是一个问题?
import { IResolvers } from "graphql-tools";
我试图从 graphql-tools 导入 IResolvers 并收到消息 Module: '"../node_modules/graphql-tools"' has no returned member 'IResolvers'。
我的依赖项是:“apollo-server-express”:“^ 3.1.2”,“graphql”:“^ 15.5.1”,“graphql-tools”:“^ 8.1.0”
这是因为我使用的是 apollo 3 而不是具有 IResolver 的 apollo 2 吗?
apollo v3 中是否有任何选项可以在生产模式下禁用游乐场?在 v2 中,您可以通过传递playground: false给 ApolloServer 选项来禁用它,但在 v3 中找不到任何选项。
我正在使用 apollo-server-fastify。
编辑:我已禁用游乐场,但我仍然可以访问 localhost:4000/graphql 并收到此消息:
GET query missing.
Run Code Online (Sandbox Code Playgroud)
我的代码:
const app = fastify({ trustProxy: true });
const server = new ApolloServer({
schema,
context: ({ request }: { request: FastifyRequest }) => {
const auth = request.headers.authorization || "";
return {
auth,
session: request.session,
sessionStore: request.sessionStore,
};
},
plugins: [
myPlugin,
env === "production"
? ApolloServerPluginLandingPageDisabled()
: ApolloServerPluginLandingPageGraphQLPlayground(),
],
});
const corsOptions = {
origin: true,
optionsSuccessStatus: 200,
credentials: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在某些字段上设置静态cacheControl,如此处所示
根据我的理解,我需要使用指令,因此我使用以下嵌套文档来声明指令
因此,我构建了一个 cacheControl 指令,这就是我的 GraphQLModule.forRootAsync 在 buildSchemaOptions 中的内容:
buildSchemaOptions: {
directives: [
new GraphQLDirective({
name: 'cacheControl',
locations: [
DirectiveLocation.FIELD_DEFINITION,
DirectiveLocation.OBJECT,
DirectiveLocation.INTERFACE,
DirectiveLocation.UNION
],
args: {
maxAge: { type: GraphQLInt },
scope: {
type: new GraphQLEnumType({
name: 'CacheControlScope',
values: {
PUBLIC: {
astNode: {
kind: 'EnumValueDefinition',
description: undefined,
name: {
kind: 'Name',
value: 'PUBLIC'
},
directives: []
}
},
PRIVATE: {
astNode: {
kind: 'EnumValueDefinition',
description: undefined,
name: {
kind: 'Name',
value: 'PRIVATE'
},
directives: []
} …Run Code Online (Sandbox Code Playgroud) apollo-server ×10
graphql ×8
apollo ×3
nestjs ×3
javascript ×2
aws-lambda ×1
code-first ×1
exception ×1
express ×1
fastify ×1
jestjs ×1
neo4j ×1
node.js ×1
typescript ×1
unit-testing ×1