Решение, которое я могу придумать, - это добавить пользовательский сервер , где вы анализируете путь, например /pathname/some-sub-information
, и преобразуете его в страницу для отображения pathname
и некоторого дополнительного параметра some-sub-information
.
server.js
const { createServer } = require('http');
const { parse } = require('url');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true);
const { pathname, query } = parsedUrl; // pathname = '/pathname/some-sub-information'
const parts = pathname.split('/');
const page = parts[1]; // 'pathname'
const param = parts[2]; // 'some-sub-information'
if (page) {
const queryParams = { ...query, pageParam: param };
app.render(req, res, '/' + page, queryParams);
} else {
handle(req, res, parsedUrl);
}
}).listen(3000, err => {
if (err) throw err;
console.log('> Ready on http://localhost:3000');
});
});
Параметры, передаваемые с сервера на клиент app.render(req, res, '/' + page, { pageParam: 'test' });
, доступны в параметрах getInitialProps
query
, например. query.pageParam
Так что страница будет выглядеть примерно так
страниц / index.js
function Index({ pageParam }) {
return (
<div>
INDEX component with {pageParam}
</div>
);
}
Index.getInitialProps = async ({ query }) => {
const { pageParam } = query;
return { pageParam };
};
export default Index;
Имея этот пользовательский сервер и pages/index.js
(node server.js
), перейдите по адресу / index / some-data-here, и вы увидите следующую страницу
Надеюсь, это поможет вам!