Различия между маршрутами запросов в nextjs с использованием next-маршрутов - PullRequest
0 голосов
/ 30 января 2019

Я работаю над проектом с next.js и Reactjs, который использует много разных языков.Поэтому мне нужно изменить язык URL.Пример:

www.example.com / es / entradas

www.example.com / en / tickets

www.example.com / de / eintrittskarten

Для создания маршрутов я увидел, что есть модуль, который мне помогает: next-маршруты

https://github.com/fridays/next-routes

Естьмного URL, и я работаю с CMS, так что мои клиенты смогут добавлять больше, поэтому маршруты не могут быть определены.Я подумал передать URL с запросами, например так:

const routes = require('next-routes');

module.exports = routes()
  .add('index', '/:lang?')
  .add('tickets', '/:lang?/:ticket')
  .add('hotel', '/:lang?/:hotel');

К моему удивлению (как вы могли заметить), он не работает, потому что маршруты не видят разницы между этими двумя последними маршрутами.Если я напишу:

www.example.com / ru / tickets

Это будет правильно перейти на мою страницу "Билеты", но если я напишу

www.example.com / ru / hotel

Он снова перейдет на мою страницу "Билеты", а не в "отель"

Знаете ли вы оКак я могу это сделать?


В моем проекте у меня есть следующие файлы, связанные с маршрутами:

server.js

const next = require('next');
const { createServer } = require('http');
const routes = require('./routes');

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dir: './src/shared', dev });
const handle = routes.getRequestHandler(app);

app.prepare()
  .then(() => {
    createServer(handle)
  .listen(3001, (err) => {
    if (err) throw err;
    console.log("> Ready on http://localhost:3001");
  });
});

rout.js

const routes = require('next-routes');


module.exports = routes()
  .add('index', '/:lang?')
  .add('tickets', '/:lang?/:ticket')
  .add('hotel', '/:lang?/:hotel');

1 Ответ

0 голосов
/ 31 января 2019

Запрос на /en/hotel идет по маршруту "тикета", потому что он на самом деле ему соответствует.

Это из-за : перед словом "тикет" в маршруте.: превратит участок маршрута в параметр с таким именем.

Поэтому вместо этого вы, вероятно, захотите:

module.exports = routes()
  .add('index', '/:lang?')
  .add('tickets', '/:lang?/ticket')
  .add('hotel', '/:lang?/hotel');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...