NodeJS + React + Next Framework добавление пути к маршруту - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь настроить приложение NodeJS, которое использует инфраструктуру Next для использования рендеринга на стороне клиента и на сервере.Я пытаюсь заставить клиент и серверный рендеринг предварять путь к генерируемым маршрутам / URL.Рендеринг на стороне сервера, кажется, работает, настроив функцию экспресс-сервера GET для прослушивания запросов, сделанных на маршруте, а затем передавая их узлу, удаляя предварительно добавленное значение маршрута.Однако, когда это происходит при рендеринге на клиенте, предварительно добавленное значение отсутствует, даже когда as="{somestring}" добавляется на страницы .js для таких элементов, как Link, поэтому при обращении к внешним файлам javascript Next в рендеринге пропускается добавленное значение.

Цель маршрутизации - позволить нам запускать несколько микроуслуг в одном домене, каждый из которых размещается в разных экземплярах в AWS и маршрутизируется с использованием целевых групп и ALB.

По существу, чтоЯ хочу сделать, это заменить / на / {somestring} , и мне нужно, чтобы это было включено не только в рендеринг на стороне сервера, но в рендеринг на стороне клиента.

Пример URL: www.example.com -> www.example.com/somestring

Визуализация HTML: www.example.com/_next/960d7341-7e35-4ea7-baf6-c2e7d457f0db/page/_app.js-> www.example.com/somestring/_next/960d7341-7e35-4ea7-baf6-c2e7d457f0db/page/_app.js

Редактировать / обновить

I 'мы пытались использовать app.setAssetPrefix и покаон правильно обрабатывает запросы на ресурсы, и страницы загружают сами ресурсы. 404 *.

Вот мой файл server.js:

const express = require('express');
const next = require('next');

const port = process.env.PORT || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app
  .prepare()
  .then(() => {
    // Port
    const server = express();
    app.setAssetPrefix('test1');
    // ======
    // Routes
    // ======

    server.get('/test1/:id', (req, res) => {
      const actualPage = `/${req.params.id}`;
      const queryParams = { id: req.params.id };

      app.render(req, res, actualPage, queryParams);
    });

    server.get('/test1', (req, res) => {
      app.render(req, res, '/');
    });

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

    // =============
    // End of Routes
    // =============

    server.listen(port, err => {
      if (err) throw err;
      console.log(`>Listening on PORT: ${port}`);
    });
  })
  .catch(ex => {
    console.error(ex.stack);
    process.exit(1);
  });

1 Ответ

0 голосов
/ 13 июня 2018

Вам нужна пользовательская маршрутизация.Проанализируйте входящий URL-адрес и замените его на то, что вы хотите.

Вот пример для принятия решения / a для / b и / b для / a

https://github.com/zeit/next.js#custom-server-and-routing

...