You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Apollo Studio Sandbox连接本地Serverless Offline GraphQL服务器

问题描述

我用serverless offline运行GraphQL服务器,尝试连接Apollo Studio,但一周前还能正常连接,现在却连不上了。把服务部署到AWS后,Apollo Studio能正常连接部署后的服务器。

环境信息

  • 设备:MacBook M1 Pro
  • Node版本:15.6

根据配置,我在http://localhost:3000/dev/playground启动了playground,能访问页面但无法连接服务器。另外,用本地网络IPhttp://192.168.1.3:3000/dev/playground也打不开,但React应用却能通过http://192.168.1.3:3000正常访问。

我的serverless.yml配置如下:

service: serverless-graphql-rds

frameworkVersion: "3.8.0"

provider:
  name: aws
  runtime: nodejs14.x
  stage: ${env:PROVIDER_STAGE}
  region: ${env:REGION}
  environment:
    JWT_SECRET: ${env:JWT_SECRET}
    DATABASE_URL: ${env:DATABASE_URL}
    REDIRECT_TO_DASHBOARD: ${env:REDIRECT_TO_DASHBOARD}
    HUB_SPOT_CLIENT_ID: ${env:HUB_SPOT_CLIENT_ID}
    HUB_SPOT_CLIENT_SECRET: ${env:HUB_SPOT_CLIENT_SECRET}
    HUB_SPOT_REDIRECT_URI: ${env:HUB_SPOT_REDIRECT_URI}

plugins:
  - serverless-plugin-typescript
  - serverless-offline
package:
  patterns:
    - "migrations/**"
    - "**.js"
    - "config"

custom:
  serverless-offline:
    httpPort: ${env:httpPort, 3000}
    lambdaPort: ${env:lambdaPort, 3002}
  serverless-plugin-typescript:
    tsConfigFileLocation: "./tsconfig.json"

functions:
  graphql:
    handler: server.handler
    events:
      - http:
          path: graphql
          method: post
          cors: true
  playground:
    handler: server.playgroundHandler
    events:
      - http:
          path: playground
          method: get
          cors: true
  oauth-callback:
    handler: ./rest-apis-handlers/oauth-callback.handler
    events:
      - http:
          path: oauth-callback
          method: get
          cors: true

包含handler函数的server.ts文件如下:

import { ApolloError, ApolloServer } from "apollo-server-lambda";
import lambdaPlayground from "graphql-playground-middleware-lambda";
import { verifyToken } from "./common/jwt";
import { useContext } from "./core/context";
import resolvers from "./graphql/resolvers";
import typeDefs from "./graphql/schema";

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ event, context, express }) => {
    const auth = express.req.headers["authorization"] as string;
    if (auth) {
      const [_, token] = auth.split("Bearer ");
      try {
        const user = verifyToken(token);
        if (user) {
          return useContext({
            type: "user",
            properties: {
              ...user,
            },
          });
        } else {
          throw new ApolloError("Not authenticated", "UNAUTHENTICATED");
        }
      } catch (ex) {}
    }
    return useContext({
      type: "public",
    });
  },
});
export const handler = server.createHandler({});

// for local endpointURL is /graphql and for prod it is /stage/graphql
export const playgroundHandler = (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  return lambdaPlayground({
    endpoint: process.env.REACT_APP_GRAPHQL_ENDPOINT,
  })(event, context, callback);
};
可能的原因及解决方案
  • 本地网络绑定限制:serverless-offline默认可能只绑定localhost,导致无法通过局域网IP访问。在serverless.yml的custom.serverless-offline配置里添加host: 0.0.0.0,让服务监听所有网卡,这样既能用localhost访问,也能通过局域网IP访问。修改后配置示例:
custom:
  serverless-offline:
    httpPort: ${env:httpPort, 3000}
    lambdaPort: ${env:lambdaPort, 3002}
    host: 0.0.0.0
  • 环境变量配置错误:playground的endpoint依赖REACT_APP_GRAPHQL_ENDPOINT环境变量,本地运行时这个变量可能没正确设置为/dev/graphql(serverless offline会自动添加stage前缀)。检查本地.env文件,确保变量值为/dev/graphql,而非生产环境路径。

  • CORS配置不完整:虽然serverless.yml里设置了cors: true,但Apollo Studio作为外部客户端,可能需要更明确的CORS规则。在ApolloServer的createHandler中补充CORS配置:

export const handler = server.createHandler({
  cors: {
    origin: true,
    credentials: true,
    methods: ['POST', 'OPTIONS'],
    allowedHeaders: ['Content-Type', 'Authorization']
  }
});
  • 依赖包版本冲突:一周前能正常运行,可能是近期更新了serverless-offline、apollo-server-lambda等依赖,引发兼容性问题。查看package.json的依赖版本,回退到之前能稳定运行的版本,比如锁定serverless-offline的版本号。

  • Node版本兼容性问题:你使用的Node 15.6是较旧版本,而serverless框架及插件可能对Node版本有更高要求。尝试升级Node到LTS版本(如16.x或18.x),旧版本可能存在网络或兼容性bug。

内容的提问来源于stack exchange,提问作者Shadab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:29