标签: apollo-server

如何使用Apollo堆栈处理错误

我正在使用Apollo Stack graphql-server-expressapollo-client.

因为我的后端不完美,所以可能会出现错误,因此我必须对该路径的错误请求做出响应.

直到现在我的主要问题是身份验证,因此我回复了一个错误.

return new Error(`${data.status}: ${data.statusText} @ ${data.url}`)
Run Code Online (Sandbox Code Playgroud)

在前端,我使用apollo-client查询数据.

return apollo
        .query({query: gql`
            query {
                ${query}
            }`,
            forceFetch: forceFetch
        })
        .then(result => { debugger; return result.data })
        .catch(error => { debugger; console.error(error); });
Run Code Online (Sandbox Code Playgroud)

但是,如果查询的一个属性响应错误,则只调用catch函数.即使是剩余属性的数据也会被转移,我在Chrome开发工具的网络标签中看到了这一点.In不是catch函数中的错误对象.

我的尝试与GraphiQL一起使用,我在同一个对象中获取错误和数据.

那么如何在不丢失整个请求的情况下为属性抛出错误呢?

apollo graphql apollo-server apollostack apollo-client

10
推荐指数
1
解决办法
1524
查看次数

如何在graphql中实现自动刷新令牌以进行基于jwt的身份验证?

我试图在基于Apollo的graphql server (2.0)中为基于JWT的身份验证找出这种情况.

基本上在登录后,用户从服务器获取accessToken和refreshToken.

AccessToken在一段时间后过期,服务器发送一条错误消息,表明令牌已过期(TokenExpiredError),然后客户端需要通过传递refreshToken与服务器进行新的accessToken通信.

流量如下 -

  1. 发生TokenExpiredError
  2. 在客户端获取该错误
  3. 使用旧的accessToken对所有请求进行排队(这样服务器不会被太多的refreshToken调用淹没,并且服务器会生成许多accessTokens)
  4. 在graphql server上调用refreshToken api以获取新的accessToken
  5. 使用新的accessToken更新所有授权呼叫的accessToken
  6. 注销用户incase refreshToken本身已过期
  7. 防止任何种类的竞争条件黑白电话

我已经在客户端实现了refreshToken变异但是无法弄清楚何时发生错误停止所有请求 - >请求新令牌 - >再次进行所有待处理请求以及刷新令牌是否已过期注销用户.

node.js jwt graphql apollo-server apollo-client

10
推荐指数
1
解决办法
4393
查看次数

Apollo 2.0.0 Graphql cookie会话

有人可以帮我这个,我的设置如下,在Apollo 2.0之前,我有一个server.js,其中我使用了express和graphql-server-express我有一个只有http的cookie会话,当用户登录时我设置了jwt令牌作为cookie,它在浏览器中设置为仅限http.在后续请求中,我验证浏览器传回的cookie.一切正常,我可以从任何其他解析器中的req.session.token访问令牌,并验证保存在cookie会话中的jwt令牌.

server.js

import express from 'express';
import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
import { ApolloEngine } from 'apollo-engine';
import bodyParser from 'body-parser';
import cors from 'cors';
import cookieSession from 'cookie-session';
import schema from './schema/';
?
const server = express();
?
server.use(
 cookieSession({
  name: 'session',
  keys: 'k1,k2',
  maxAge: 30 * 60 * 1000,
  domain: '.mydomain.com',
  path: '/',
 }),
);
?
const corsOptions = {
 origin: 'http://local.mydomain.com:3000',
 credentials: true,
 methods: ['GET', 'PUT', 'POST', 'OPTIONS'],
};
?
server.use(cors(corsOptions));
?
server.use(
 '/graphql', …
Run Code Online (Sandbox Code Playgroud)

session-cookies graphql apollo-server express-graphql

10
推荐指数
1
解决办法
4198
查看次数

Apollo Server - GraphQL 错误:只能有一种名为“查询”的类型

我是 GraphQL 的新手。我正在遵循 Internet 上的几个指南,以“创建”一个使用 Apollo Server + Express + GraphQL + MongoDB 的小应用程序。

  • 我试图复制这个YT指南(他创造root.js上的文件类型定义文件夹)。
  • 这一个用于测试目的。
  • 这一次,以确保我的文件夹结构是正确的。

编译时我从 GraphQL 得到:

错误:只能有一种名为“用户”的类型。

错误:只能有一种名为“查询”的类型。

我的代码结构如下:

  • 配置
  • 楷模
  • 解析器
    • 索引.js
    • 用户.js
  • 类型定义
    • 索引.js
    • 根.js
    • 用户.js
  • 索引.js

到目前为止,我的代码如下所示:

typeDefs/user.js

import { gql } from 'apollo-server-express';

const user = gql`
    type User {
        id: ID!
        name: String
        email: String
        password: String
    }

    type Query {
        getUsers: [User]
    }

    type Mutation {
        addUser(name: String!, email: String!, …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express graphql apollo-server

10
推荐指数
1
解决办法
7084
查看次数

如何在 apollo-server-lambda 中处理 cookie

使用 apollo-server-lambda 在 lambda 无服务器中设置 cookie

我正在从 apollo-server 迁移到无服务器版本。有没有办法可以访问响应对象或其他方式来设置 cookie?

context: ({ event, context }) => ({
   headers: event.headers,
   functionName: context.functionName,
   event,
   context,
 }),
Run Code Online (Sandbox Code Playgroud)

我期望在上下文中可以像在 apollo-server 中一样访问 res 对象。

lambda graphql apollo-server serverless

10
推荐指数
1
解决办法
1316
查看次数

SyntaxError: Cannot use import statement outside a module

I've got an ApolloServer project that's giving me trouble, so I thought I might update it and ran into issues when using the latest Babel. My "index.js" is:

require('dotenv').config()
import {startServer} from './server'
startServer()
Run Code Online (Sandbox Code Playgroud)

And when I run it I get the error "SyntaxError: Cannot use import statement outside a module". First I tried doing things to convince TPTB* that this was a module (with no success). So I changed the "import" to a "require" and this worked.

But now …

javascript node.js babeljs apollo-server

10
推荐指数
15
解决办法
1万
查看次数

使用 Jest 测试 TypeScript:“没有重载与此调用匹配”

我正在使用 Jest 测试 Apollo 服务器RESTDataSource。我的应用程序是用 TypeScript 编写的。我的类CDCDataSource扩展了抽象类RESTDataSource,它本身扩展了抽象类DataSource。 具有允许您从外部 REST 数据源提取数据的RESTDataSource方法。get我希望模拟这个方法,因为我希望模拟外部数据源。

  protected async get<TResult = any>(
    path: string,
    params?: URLSearchParamsInit,
    init?: RequestInit,
  ): Promise<TResult> {
    return this.fetch<TResult>(
      Object.assign({ method: 'GET', path, params }, init),
    );
  }
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试使用 Jest 来模拟这个方法时spyOn——遵循这里的第二个答案:Jest:如何模拟类的一个特定方法——

import CDCDataSource from '../CDCDataSource';

test('Test', () => {
    let dataSource = new CDCDataSource();
    let spy = jest.spyOn(dataSource, 'get').mockImplementation(() => 'Hello');
    expect(dataSource.get()).toBe('Hello');


Run Code Online (Sandbox Code Playgroud)

但是,我收到 TypeScript 错误

TS2768:没有重载与此调用匹配

越过 …

unit-testing typescript apollo jestjs apollo-server

10
推荐指数
1
解决办法
2万
查看次数

错误:在 next.js 中调用 `server.createHandler()` 之前必须 `await server.start()`

我在尝试检查 apollo graphql 是否正常工作时收到此错误。错误:您必须await server.start()在调用之前server.createHandler() 注意:有一个类似的问题,但我没有使用express错误:您必须在调用`server.applyMiddleware()`之前`await server.start()`

//api/graphql.js

  import  {  ApolloServer  }  from  "apollo-server-micro";

import  {  resolvers  }  from  "../../apis/resolver";
import  {  typeDefs  }  from  "../../apis/schemas";

const  apolloServer  =  new  ApolloServer({  typeDefs,  resolvers  });

export  const  config  =  {
    api:  {
        bodyParser:  false
    }
};

export  default  apolloServer.createHandler({ path:  "/api/graphql"  });
Run Code Online (Sandbox Code Playgroud)

//解析器

import axios from "axios";

export const resolvers = {
  Query: {
    getUsers: async () => {
      try {
        const users = await axios.get("https://api.github.com/users");
        return …
Run Code Online (Sandbox Code Playgroud)

javascript node.js graphql apollo-server next.js

10
推荐指数
2
解决办法
5648
查看次数

Apollo v3 无法到达服务器

我正在尝试将我的基本 apollo 服务器部署到 aws ec2 实例,但我面临着

“无法访问服务器 从 Studio 通过 HTTPS 向您的 HTTP 端点发出的网络请求不安全,因此我们无法内省您的端点。”

所以我该怎么做 ?

amazon-ec2 amazon-web-services apollo graphql apollo-server

10
推荐指数
0
解决办法
755
查看次数

用于文件下载的GraphQL端点

是否可以从apollo-server-express应用程序上的GraphQL端点在浏览器中触发文件下载?

我有一个标准快速app.get函数编写的端点(见下文),但我想利用GraphQL上下文进行文件下载,所以我想知道是否有可能从GraphQL端点下载.

这是我在app.get函数快速结束时所拥有的一个简单示例:

app.get('/download-batch/:batchId', async (req, res) => {
  res.send(new Buffer('test'));
});
Run Code Online (Sandbox Code Playgroud)

任何帮助我都非常感激.谢谢!

graphql apollo-server

9
推荐指数
1
解决办法
2755
查看次数