使用next-routes的nextjs中查询路由之间的差异

时间:2019-01-30 09:36:46

标签: javascript reactjs routes serverside-rendering next.js

我正在与next.js和Reactjs一起使用一个项目,该项目使用许多不同的语言。因此,我需要更改语言网址。示例:

  

www.example.com/es/entradas

     

www.example.com/en/tickets

     

www.example.com/de/eintrittskarten

创建路线时,我看到有一个模块可以帮助我:下一路线

  

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

有很多网址,并且我正在使用CMS,因此我的客户将能够添加更多内容,因此路由不会被编码。我想像这样通过查询传递网址:

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

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

令我惊讶的是(如您所见),这是行不通的,因为路线没有看到最后两条路线之间的差异。如果我写:

  

www.example.com/en/tickets

它将正确进入我的页面“门票”,但是如果我写

  

www.example.com/en/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");
  });
});

routes.js

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


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

1 个答案:

答案 0 :(得分:0)

2^64 - 2^52的请求将转到“机票”路线,因为它实际上与之匹配。

这是因为路线中“机票”一词前的/en/hotel:会将路线的一部分变成具有该名称的参数。

因此,您可能想要的是:

: