Я пытаюсь настроить приложение 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);
});