Очистите URL с помощью Next.js, используя graphql-yoga - PullRequest
2 голосов
/ 25 апреля 2019

Я был бы очень признателен за помощь в реализации поддержки чистых URL на стороне сервера для next.js.

Я использую graphql-yoga (и prisma) на backend и next.js с клиентом apollo на внешнем интерфейсе.

Мой сервер graphql-yoga работает на порту 4444.

Не уверен, как заставить это работать и каков будет лучший подход.

Я пытался использовать документацию next.js для поддержки на стороне сервера чистых URL .

Он использует server.get, который, похоже, не работает с yoga-graphql.

Я также пытался внедрить next-маршруты в качестве промежуточного программного обеспечения, также не удалось заставить его работать (кажется, что server.get никогда не запускается).

Некоторыеответы, которые я нашел, предполагают наличие отдельного файла для маршрутов next.js с использованием настраиваемого экспресс-сервера и отдельного файла для graphql-yoga.

Я не уверен, как запустить одновременно server.js и index.js и рекомендуется ли это делать.

В моем бэкэнде / src / index.js:


require("dotenv").config({ path: ".env" });

const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

const createServer = require("./createServer");

const server = createServer();

app
  .prepare()
  .then(() => {

   server.express.get('/item/:id', (req, res) => {
      const actualPage = '/item'
      const queryParams = { id: req.params.id }
      app.render(req, res, actualPage, queryParams)
    })

    server.express.get('*', (req, res) => {
      return handle(req, res)
    })

server.start(
  {
    cors: {
      credentials: true,
      origin: [process.env.FRONTEND_URL, process.env.BACKEND_URL, process.env.PLAYGROUND_URL]
    }
  },
  deets => {
    console.log(`Server is now running on port http://localhost:${deets.port}`);
  }
);

})
  .catch(ex => {
    console.error(ex.stack)
    process.exit(1)
  })

Я ожидаю, что этот код предоставит чистые URL для таких путей, как:

localhost / item? id = 1 (начальный путь)

localhost / item/ 1 (чистый URL)

Однако, когда я перехожу к localhost / item / 1 из моего интерфейса, я получаю ошибку 404 (остальная часть приложения работает как положено), и когда я запускаю свой сервер graphql,он продолжает входить в консоль: «Клиент пингуется, но для страницы нет записи: /_error".

localhost / 4444 также выдает ошибку 404 вместо того, чтобы показывать графическую площадку.

...