2

我有一个 Next.js/Express/Apollo GraphQL 应用程序在 localhost 上运行良好。

我尝试在 Zeit Now 上部署它,Next.js 部分工作正常,但 GraphQL 后端失败,因为/graphql路由返回:

502: An error occurred with your deployment
Code: NO_STATUS_CODE_FROM_LAMBDA

我的now.json样子:

{
  "version": 2,
  "builds": [
    { "src": "next.config.js", "use": "@now/next" },
    { "src": "server/server.js", "use": "@now/node" }
  ],
  "routes": [
    { "src": "/api/(.*)", "dest": "server/server.js" },
    { "src": "/graphql", "dest": "server/server.js" }
  ]
}

建议?

4

2 回答 2

2

这是在 Zeit Now(作为无服务器函数/lambda)和 Heroku(使用 Express 服务器)上运行的 Next.js/Apollo GraphQL 的完整示例:

https://github.com/tomsoderlund/nextjs-pwa-graphql-sql-boilerplate

nextjs-pwa-graphql-sql-boilerplate

于 2019-12-14T13:57:55.677 回答
0

直到我在 Wes Bos slack 频道上找到解决方案之前,我都遇到了这个错误。

以下内容对我有用,但您可能会因为其他原因而收到该错误。

我不确定它为什么有效。

你可以看到它在这里工作

  1. cd backend
  2. npm install graphql-import
  3. 更新脚本package.json
"deploy": "prisma deploy --env-file variables.env&& npm run writeSchema",
"writeSchema": "node src/writeSchema.js"

注意:对于非 Windows 用户,请确保在&&

  1. 创建src/writeSchema.js
const fs = require('fs');
const { importSchema } = require('graphql-import');
const text = importSchema("src/generated/prisma.graphql");
fs.writeFileSync("src/schema_prep.graphql", text)
  1. 更新src/db.js
const db = new Prisma({
typeDefs: __dirname + "/schema_prep.graphql",
...
});
  1. 更新src/createServer.js
return new GraphQLServer({
typeDefs: __dirname + '/schema.graphql',
...
});
  1. 更新src/schema.graphql
# import * from './schema_prep.graphql'
  1. 创造now.json
{
    "version": 2,
    "name": "Project Name",
    "builds": [
        { "src": "src/index.js", "use": "@now/node-server" }
    ],
    "routes": [
        { "src": "/.*", "dest": "src/index.js" }
    ],
    "env": {
        "SOME_VARIABLE": "xxx",
        ...
    }
}
  1. 运行npm run deploy初始创建schema_prep.graphql.
  2. now

另一个回复是这样说的:

您不应该混合使用 graphql 导入和 js/ts 导入。graphql 文件上的语法将由 graphql-import 解释,并且将被 ncc 忽略(读取 __dirname 内容并将文件移动到正确目录等的编译器)在我的示例中,“schema_prep.graphql”已经用从生成的 graphql 文件导入。

希望这会有所帮助。

于 2019-05-29T23:46:38.873 回答