Как развернуть Next.js с бэкэндом GraphQL на Zeit Now? - PullRequest
1 голос
/ 25 мая 2019

У меня есть приложение 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" }
  ]
}

Предложения

1 Ответ

0 голосов
/ 30 мая 2019

Я получал эту ошибку, пока не нашел решение на слабом канале Wes Bos.

Следующее сработало для меня, но, возможно, вы могли получить эту ошибку по другой причине.

Я не уверен, почему это работает.

Вы можете видеть, как он работает здесь

  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.

Надеюсь, это поможет.

...