如何在Zeit Now上使用GraphQL后端部署Next.js?

时间:2019-05-25 13:58:44

标签: graphql apollo react-apollo next.js zeit-now

我有一个在本地主机上运行良好的Next.js / Express / Apollo GraphQL应用程序。

我尝试将其部署在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" }
  ]
}

建议?

2 个答案:

答案 0 :(得分:0)

直到在Wes Bos闲置频道上找到解决方案之前,我一直遇到这个错误。

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

我不确定为什么它能起作用。

您可以看到它在here上运行

  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文件中的导入进行了预处理。

希望这会有所帮助。

答案 1 :(得分:0)

这是在Zeit Now(作为无服务器功能/ lambda)和Heroku(与Express服务器一起)上运行的Next.js / Apollo GraphQL的完整示例:

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

nextjs-pwa-graphql-sql-boilerplate